PHP数组值为key

时间:2018-05-24 12:20:02

标签: php arrays

我有这个数组:

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

但我想知道这是否可以更优雅的方式完成?

6 个答案:

答案 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;