0

我不确定“双向”是否是它的最佳名称,但我想要一个键和数据都是唯一对的数据结构。例如:a=1,b=2,c=3... 我希望能够在任一方向调用变量(“a”的数字是多少?3 的字母是什么?)。我觉得这应该是一个很容易的任务,但我正在画一个空白。我能想到的最好的方法是数组(“a”=>1,1=>“a”,“b”=>2,2=>“b”...)。除了将每对存储两次之外,还有更好的方法,对吧?

4

2 回答 2

3

您可以使用 array_flip

此外,您可以将原始数组与翻转的数组合并。

$original = array ( ... );
$extended = array_merge($original, array_flip($original));

如果您不想复制数据但保持透明度:

function dosearch($array, $needle) {
    if (isset($array[$needle])) 
        return $array[$needle];

    $tmparray=array_flip($array);
    if (isset($tmparray[$needle]))
        return $tmparray[$needle];

    return false; //nothing found
}

这应该是透明的和执行的,因为你可以根据需要翻转。(感谢@imsiso 的启发)

于 2013-09-15T00:20:35.600 回答
0

您可以使用 array_filter,如下所示:

$arr = array(
              "a"=>1,
              "b"=>2,
              "c"=>3
              );
$filtered_arr = array_filter($arr, function($item) { return( $item == "3" ); } );
print_r($filtered_arr);

PHP 中没有对“双向”字典的本机支持,但您可以将其包装到升级后的数组中。

你应该检查什么是最有效的方法(你看到这里有很多评论指定了这样做的方法)。

编辑:它的性能比 array_flip 更好,因为它不是复制数组,只是搜索它。

于 2013-09-15T00:23:30.423 回答