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个。但是为了做到这一点,我需要能够在排序后分别提取出字符串,可以用上面解释的分频器算法完成,但这不是可取的,这就是为什么我要求一个替代方案。
答
您可以使用多维数组(例如,使用它作为$container["Andrew"]["Rasmussen"]
)。
此外,您还可以封装所有的“黑客”(无论是二维数组或字符串连接)在自定义ArrayIndexedByPairs类,这可能是这样的:
interface IArrayIndexedByPairs {
public Add($key1, $key2, $value);
public Contains($key1, $key2);
public Get($key1, $key2);
}
可能吗?是的,但似乎比仅使用串联和爆炸更多的工作。 – paxdiablo 2012-02-22 05:21:49
@paxdiablo你对concat + explode和serialize()+ unserialize()数组有什么想法? – 2012-02-22 05:31:30
我怀疑序列化会更好,因为你不需要发明一些任意的分隔符。 – paxdiablo 2012-02-22 05:54:42