将简单数组转换为key => value数组的最快方法

时间:2016-03-16 11:05:13

标签: php arrays preg-split

我想转移

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

最快捷,最明智的方式

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

使用foreach并不是什么大不了的事。但我更喜欢聪明的单行。

3 个答案:

答案 0 :(得分:1)

尝试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
)

答案 1 :(得分:1)

有一种方法可以给猫皮肤。

使用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()时的版本)。

答案 2 :(得分:0)

不是单行,但是......

<?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);