php是否有c++';s std::pair?

php是否有c++';s std::pair?,php,c++,associative-array,std-pair,Php,C++,Associative Array,Std Pair,我想在PHP中创建一个关联数组,其中键是一对字符串 起初我考虑在中间用某种唯一的分隔符来连接字符串,然后再把它们分开,但是这看起来像是使用一对的棘手的解决办法。 考虑以下代码: $andrew = array('Andrew', 'Rasmussen'); $john = array('John', 'Smith'); $container[$andrew] = 15; $container[$john] = 12; $pair = array('Andrew', 'Rasmussen');

我想在PHP中创建一个关联数组,其中键是一对字符串

起初我考虑在中间用某种唯一的分隔符来连接字符串,然后再把它们分开,但是这看起来像是使用一对的棘手的解决办法。

考虑以下代码:

$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中不能将数组用作数组中的键。有没有一种很好的方法可以在不连接字符串然后在以后解析字符串的情况下执行类似的操作

编辑


我想这样做是有原因的。我有一个
数组(key=string1,value=array(key=string2,value=executions))
并且我正在尝试查找字符串对的前5个(按出现次数)。所以我基本上是想把它展平成一个一维数组,然后对它进行排序,这样我就可以轻松地抓住前5个。但要做到这一点,我需要能够在排序后单独提取字符串,这可以通过上面解释的除法器算法来完成,但这并不可取,这就是为什么我要求提供一种替代方法。

您可以使用多维数组(将其用作
$container[“Andrew”][“Rasmussen”]
例如)

此外,您还可以在自定义ArrayIndexedByPairs类中封装所有“黑客攻击”(无论是二维数组还是字符串连接),如下所示:

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

您可以使用多维数组(例如,将其用作
$container[“Andrew”][“Rasmussen”]

此外,您还可以在自定义ArrayIndexedByPairs类中封装所有“黑客攻击”(无论是二维数组还是字符串连接),如下所示:

interface IArrayIndexedByPairs {
    public Add($key1, $key2, $value);
    public Contains($key1, $key2);
    public Get($key1, $key2);
}
把钥匙打开怎么样

$pair = array('Andrew', 'Rasmussen');
if (array_key_exists( serialize( $pair), $container)) {
    echo 'true';
} else {
    echo 'false';
}
把钥匙打开怎么样

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

可能的是的,但这似乎比仅仅使用串联和
explode
@paxdiablo要做的工作多得多。你对concat+explode和serialize()+unserialize()数组有什么看法?我怀疑序列化会更好,因为你不需要发明一些任意的分隔符。可能吗?是的,但这似乎比仅仅使用串联和
explode
@paxdiablo要多得多。你对concat+explode与serialize()+unserialize()数组有什么看法?我怀疑序列化会更好,因为你不需要发明一些任意的分隔符。看起来有一个unserialize。我仍然不认为这是最优雅的方法,但它绝对是简单的!谢谢。看起来有一个非序列化的。我仍然不认为这是最优雅的方法,但它绝对是简单的!谢谢