繁体   English   中英

PHP数组值到键

[英]PHP array value to key

我有这个数组:

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

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

这需要值的数组映射

$params = array_map(function ($i) { return [$i['name'] => $i['value']]; }, $params);

您可以使用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()

尝试这个 :

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'];
}

编辑:

另一个更优雅的方法是:

foreach($params as $k=>$s){
    $params[$k]=array($s['name']=>$s['value']);
}

这有点短。 通过不使用foreach您可以直接替换元素。

for ($i = 0; $i < count ($params); $i++)
    $params[$i] = array ($params[$i]['name'] => $params[$i]['value']);

为了使您的当前代码更加美观,您可以传递多个参数以取消设置

foreach ($params as &$param) {
    $param[$param['name']] = $param['value'];
    unset($param['name'], $param['value'], $param);
}

请尝试以下方法:

foreach ($params as $k => $v)
{
    $nary[$v[name]] = $v[value];
}

$params = $nary;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM