如何在PHP中最快地将简单数组转换为关联数组,以便可以使用isset($array[$value])
检查值?
即执行以下转换的最快方式:
$array = array(1, 2, 3, 4, 5);
$assoc = array();
foreach ($array as $i => $value) {
$assoc[$value] = 1;
}
如何在PHP中最快地将简单数组转换为关联数组,以便可以使用isset($array[$value])
检查值?
即执行以下转换的最快方式:
$array = array(1, 2, 3, 4, 5);
$assoc = array();
foreach ($array as $i => $value) {
$assoc[$value] = 1;
}
你的代码与以下代码完全等价:
$assoc = array_fill_keys(array(1, 2, 3, 4, 5), 1); // or
$assoc = array_fill_keys(range(1, 5), 1);
array_flip()
虽然可能适合你的用途,但并不相同。
PHP参考文献:array_fill_keys()
,array_flip()
$array = array(1, 2, 3, 4, 5);
$assoc = array_combine($array,$array);
array_flip()
正是这样做的:
array_flip() 返回一个键值翻转后的数组,即来自 trans 的键变成值,来自 trans 的值变成键。
请注意,trans 的值需要是有效的键,即它们需要是整数或字符串。如果一个值具有错误类型,则会发出警告,并且相关的键/值对不会被翻转。
如果一个值有多个出现,则最新的键将用作其值,而其他所有值都将丢失。
但除此之外,在 PHP 中只有一种类型的数组。即使是数字(“简单”)数组也是关联数组。
$array[5]
没有被设置,因为键从0
到4
。你想要一个键从1到5(或者换句话说,你想把一个数组的值设为另一个数组的键)。但是,这两个数组仍然都是关联数组。$array
的键只是从0开始的连续整数。 - Felix Kling只需使用这个逻辑
$var1 = json_encode($arr1, JSON_FORCE_OBJECT);
$var1 = json_decode($var1);
$arr1是需要转换为关联数组的数组。 可以通过json_encode和json_decode来实现。
function simple_to_associative($array) {
$new_array = [];
$i = 0;
$last_elem = end($array);
$nr_elems = count($array);
foreach ($array as $index=>$value) {
if($i % 2 == 0 && $last_elem == $value) {
$new_array[$value] = '';
} elseif($i % 2 == 0) {
$new_array[$value] = $array[$index + 1];
}
$i++;
}
return $new_array;
}
适用于任何无限元素的简单数组。