将非关联数组转换为关联数组的最常用方法

时间:2011-09-21 13:41:39

标签: php arrays associative-array

我经常需要将数组转换为关联数组的功能(通常是为了能够使用isset检查条目是否存在)。

让我举个例子:

$test = array("foo", "bar", "faz");

我想把它转换成类似的东西:

$test = array("foo" => true, "bar" => true, "faz" => true);

我知道这些技术(几乎)实现了我想做的事情,但我正在寻找一些比这更光滑,更优雅的技术:

$new = array();
foreach ($test as $v) $new[$v] = true; // want to do it without a loop

$new = array_flip($test); // works for isset but array_values($new) are all different

$new = array_map(function() { return true; }, array_flip($test)); // would work but verbose

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

$new = array_combine( $test, array_fill(0, count($test), true) );

答案 1 :(得分:1)

像往常一样,你只需要问一个问题,然后你自己找到答案: - )

使用PHP 5.2,您可以这样做:

$new = array_fill_keys($test, true);

在该版本下方,您可以使用此解决方法:

$new = array_combine($test, array_fill(0, count($test), true));

答案 2 :(得分:0)

array_combinearray_fill

一起使用

答案 3 :(得分:0)

  

想要在没有循环的情况下进行

这里有一个秘密的知识:每次你搞乱数组时,都会涉及一个循环。即使你没有看到它。

  

适用于isset但是array_values($ new)都是不同的

那么什么?这些不同的价值有什么问题?

  

会工作但是详细

这里有另一个秘密知识:一个人可以创建一个功能。并按照自己的意愿隐藏尽可能多的代码。

老实说,你已经无处可去了。难道你没有真正需要解决的问题吗?

BTW,你从哪里得到你的初始阵列?