我经常需要将数组转换为关联数组的功能(通常是为了能够使用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
有什么想法吗?
答案 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_combine
与array_fill
答案 3 :(得分:0)
想要在没有循环的情况下进行
这里有一个秘密的知识:每次你搞乱数组时,都会涉及一个循环。即使你没有看到它。
那么什么?这些不同的价值有什么问题?适用于isset但是array_values($ new)都是不同的
会工作但是详细
这里有另一个秘密知识:一个人可以创建一个功能。并按照自己的意愿隐藏尽可能多的代码。
老实说,你已经无处可去了。难道你没有真正需要解决的问题吗?
BTW,你从哪里得到你的初始阵列?