我不确定“双向”是否是它的最佳名称,但我想要一种数据结构,其中密钥和数据都是唯一的对。例如:a = 1,b = 2,c = 3 ......我希望能够在任一方向调用变量(“a”的数字是什么?3的字母是什么?)。我觉得这应该是一个非常简单的任务,但我画了一个空白。我能想到的最好的就是数组(“a”=> 1,1 =>“a”,“b”=> 2,2 =>“b”......)。除了存储两对之外,还有一种更好的方法吗?对吗?
答案 0 :(得分: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的灵感)
答案 1 :(得分: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更好,因为它不会复制只搜索它的数组。