【问题标题】:Does php have c++'s std::pair?php 有 c++ 的 std::pair 吗?
【发布时间】:2012-03-12 11:07:20
【问题描述】:

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

起初我正在考虑将字符串与中间的某种唯一分隔符连接起来,然后稍后将它们分开,但这似乎是使用一对的一种hacky解决方法。

考虑以下代码:

$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 个(就出现次数而言)。所以我基本上试图将其展平为一维数组,然后对其进行排序,以便我可以轻松地获得前 5 个。但要做到这一点,我需要能够在排序后单独提取字符串,这可以使用上面解释的除法器算法来完成,但这不是可取的,这就是我要求替代方案的原因。

【问题讨论】:

  • 可能吗?是的,但它似乎比仅仅使用串联和explode 要做更多的工作。
  • @paxdiablo 您对 concat + explode 与 serialize() + unserialize() 数组有何看法?
  • 我怀疑序列化会更好,因为您不需要发明一些任意分隔符。

标签: php c++ associative-array std-pair


【解决方案1】:

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

此外,您可以在自定义 ArrayIndexedByPairs 类中封装所有“hacking”(二维数组或字符串连接),如下所示:

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

【讨论】:

    【解决方案2】:

    serializekey 怎么样?

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

    【讨论】:

    • 看起来有反序列化。我仍然不认为这是最优雅的方法,但绝对简单!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 2011-03-24
    • 1970-01-01
    • 2016-06-13
    • 2023-03-28
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    相关资源
    最近更新 更多