制作双向阵列的最佳方法是什么?

时间:2013-09-15 00:14:53

标签: php

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

2 个答案:

答案 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更好,因为它不会复制只搜索它的数组。