我有这个数组:
params {
[0] => {
name => "xxx"
value => "yyy"
}
[1] => {
name => "uuu"
value => "vvv"
}
}
我希望实现这一目标:
params {
[0] => {
xxx => "yyy"
}
[1] => {
uuu => "vvv"
}
}
我可以这样做:
foreach ($params as &$param) {
$param[$param['name']] = $param['value'];
unset($param['name']);
unset($param['value']);
unset($param);
}
但我想知道这是否可以更优雅的方式完成?
答案 0 :(得分:6)
这需要array mapping个值:
$params = array_map(function ($i) { return [$i['name'] => $i['value']]; }, $params);
答案 1 :(得分:1)
您可以使用array_map
重复数组。
$params = [
[
'name' => "xxx",
'value' => "yyy"
],
[
'name' => "uuu",
'value' => "vvv"
]
];
$params = array_map(function($o){
return [ $o['name'] => $o['value'] ];
}, $params);
echo "<pre>";
print_r( $params );
echo "</pre>";
这将导致:
Array
(
[0] => Array
(
[xxx] => yyy
)
[1] => Array
(
[uuu] => vvv
)
)
Doc:array_map()
答案 2 :(得分:0)
试试这个:
foreach ($params as $key => $sub_array) {
// unset original array data
unset($params[$key]);
// construct the new values
$params[$key][$sub_array['name']] = $sub_array['value'];
}
答案 3 :(得分:0)
这有点短。如果不使用foreach
,您可以直接替换元素。
for ($i = 0; $i < count ($params); $i++)
$params[$i] = array ($params[$i]['name'] => $params[$i]['value']);
答案 4 :(得分:0)
为了使您当前的代码更优雅,您可以将多个参数传递给unset
foreach ($params as &$param) {
$param[$param['name']] = $param['value'];
unset($param['name'], $param['value'], $param);
}
答案 5 :(得分:-2)
请试试这个:
foreach ($params as $k => $v)
{
$nary[$v[name]] = $v[value];
}
$params = $nary;