将具有索引和值的数组转换为数组

时间:2018-09-13 15:28:04

标签: php arrays

我有一个数组作为键=>值对,例如:

$array = [ 10 => 'Windows', 12 => 'Keyboard', 15 => 'Monitor' ]; 

在不使用任何foreach的情况下我想实现的目标或循环以下操作:

$converted = [ 
  0 => [ 'id' => 10, 'name' => 'Windows'],
  1 => [ 'id' => 12, 'name' => 'Keyboard'],
  2 => [ 'id' => 15, 'name' => 'Monitor']
];

这里它们在新数组中的索引无关紧要。有什么提示吗?

2 个答案:

答案 0 :(得分:2)

没有foreach也没有循环,但是现在有一个闭包:

$result = array_map(function ($id, $name) {
    return [
        'id' => $id,
        'name' => $name
    ];
}, array_keys($array), array_values($array));

即使有一个PHP函数完全做到了这一点,它也会在内部使用循环。

function do_what_ghazanfar_mir_wants(array $array) {
    return array_map(function ($id, $name) {
        return [
            'id' => $id,
            'name' => $name
        ];
    }, array_keys($array), array_values($array));
}

单个衬里是:

$result = do_what_ghazanfar_mir_wants($array);

foreach进行比较的方法:

$res = [];
foreach ($array as $id => $name) {
    $res[] = [ 'id' => $id, 'name' => $name ];
}

答案 1 :(得分:2)

如果您想使其真正短,那么array_walk将在一行中完成:

array_walk($array, function(&$value, $key) { $value = ['id' => $key, 'name' => $value]; });

请参见https://3v4l.org/OEohi

但是我认为foreach循环可能更具可读性。

相关问题