34

在 PHP 中将简单数组转换为关联数组以便可以在 中检查值的最快方法是isset($array[$value])什么?

即进行以下转换的最快方法:

$array = array(1, 2, 3, 4, 5);
$assoc = array();

foreach ($array as $i => $value) {
        $assoc[$value] = 1;
}
4

5 回答 5

38

您的代码完全等同于:

$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()

于 2011-05-27T14:31:31.123 回答
20

array_flip()正是这样做的:

array_flip()以翻转顺序返回一个数组,即来自trans的键成为值,来自trans的值成为键。

请注意,trans的值必须是有效的键,即它们需要是integerstring。如果值的类型错误,则会发出警告,并且相关的键/值对不会被翻转

如果一个值出现多次,则最新的键将用作其值,而其他所有键都将丢失。


但除此之外,PHP 中只有一种类型的数组。甚至数字(“简单”,正如你所说的)数组也是关联的。

于 2011-05-27T14:08:50.997 回答
17

如果有人仍然想知道如何做到这一点,可以使用array_combine函数来解决这个问题。

$array = array(1, 2, 3, 4, 5);
$assoc = array_combine($array,$array);
于 2018-11-20T08:37:55.670 回答
0

只需使用此逻辑

$var1 = json_encode($arr1, JSON_FORCE_OBJECT);
$var1 = json_decode($var1);

其中 $arr1 是必须转换为关联数组的数组。这可以通过 json_encode 和 json_decode 来实现

于 2018-05-14T13:02:27.120 回答
-1
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;
}

适用于任何简单的无限元素数组。

于 2019-07-18T16:06:37.877 回答