php有C++的std :: pair吗?

问题描述:

我想在PHP中创建一个关联数组,其中的键是一对字符串。php有C++的std :: pair吗?

起初,我正考虑将字符串与中间的某种独特分隔线连接起来,然后再分开它们,但这对于使用一对来说似乎是一个拙劣的解决方法。

考虑下面的代码:

$andrew = array('Andrew', 'Rasmussen'); 
$john = array('John', 'Smith'); 
$container[$andrew] = 15; 
$container[$john] = 12; 

$pair = array('Andrew', 'Rasmussen'); 
if (array_key_exists($pair, $container)) { 
    echo 'true'; 
} else { 
    echo 'false'; 
} 

显然,这种代码将不能工作,因为你不能使用数组作为在PHP数组的一个关键。有没有一个方式来做这样的事情没有连接,然后解析字符串?

编辑

我有想要做的一个原因。我有一个array(key=string1,value=array(key=string2,value=occurrences)),我试图找到字符串对的前5名(按出现次数)。所以我基本上是想把它变成一个1d的数组,然后对它进行排序,这样我就可以轻松地抓住前5个。但是为了做到这一点,我需要能够在排序后分别提取出字符串,可以用上面解释的分频器算法完成,但这不是可取的,这就是为什么我要求一个替代方案。

+0

可能吗?是的,但似乎比仅使用串联和爆炸更多的工作。 – paxdiablo 2012-02-22 05:21:49

+0

@paxdiablo你对concat + explode和serialize()+ unserialize()数组有什么想法? – 2012-02-22 05:31:30

+0

我怀疑序列化会更好,因为你不需要发明一些任意的分隔符。 – paxdiablo 2012-02-22 05:54:42

如何serialize荷兰国际集团的键?

$pair = array('Andrew', 'Rasmussen'); 
if (array_key_exists(serialize($pair), $container)) { 
    echo 'true'; 
} else { 
    echo 'false'; 
} 
+0

你可以反序列化吗? – 2012-02-22 05:26:27

+0

看起来像是有一个反序列化。我仍然不认为这是最优雅的方法,但它绝对简单!谢谢。 – 2012-02-22 05:27:30

+0

是的,你可以反序列化! – nickb 2012-02-22 05:37:47

您可以使用多维数组(例如,使用它作为$container["Andrew"]["Rasmussen"])。

此外,您还可以封装所有的“黑客”(无论是二维数组或字符串连接)在自定义ArrayIndexedByPairs类,这可能是这样的:

interface IArrayIndexedByPairs { 
    public Add($key1, $key2, $value); 
    public Contains($key1, $key2); 
    public Get($key1, $key2); 
}