以最快的方式将简单数组转换为键=>值数组

Translate simple array into key=>value array the fastest way

我要转让

Array
(
    [0] => name|smith
    [1] => kid|tom
    [2] => wife|emily
)

进入

的最快、最聪明的方法
Array
(
    [name] => smith
    [kid] => tom
    [wife] => emily
)

为此使用 foreach 没什么大不了的。但我更喜欢智能单线。

不是单线,而是...

<?php

$a = array(
    'name|smith',
    'kid|tom',
    'wife|emily',
);

$a2 = array();

foreach($a AS $val) {
    list($key, $value) = explode("|", $val);
    $a2[$key] = $value;
}

print_r($a);
print_r($a2);

尝试array_walk函数:

$a = array
(
    0 => 'name|smith',
    1 => 'kid|tom',
    2 => 'wife|emily'
);

$new_arr = array();

array_walk($a, function($v, $k) use(&$new_arr){
    $arr = explode('|', $v);
    $new_arr[$arr[0]] = $arr[1];
});
print_r($new_arr);

输出

Array
(
    [name] => smith
    [kid] => tom
    [wife] => emily
)

给猫剥皮的方法不止一种。

使用array_reduce()(但不是在一行中):

$result = array_reduce(
    $a,
    function (array $carry, $item) {
        list($key, $value) = explode('|', $item);
        $carry[$key] = $value;
        return $carry;
    },
    array()
);

以及单行解决方案:

array_column(array_map(function($item) { return explode('|', $item); }, $a), 1, 0)

请注意,它需要PHP 5.5(这是引入功能array_column()时的版本)。