PHP 数组值到键

问题描述 投票:0回答:7

我有这个数组:

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

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

php arrays
7个回答
6
投票

这需要值的数组映射

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

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
        )

)

文档:array_map()


0
投票

这个有点短。如果不使用

foreach
,您可以直接替换元素。

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

0
投票

为了使当前的代码更加优雅,您可以将多个参数传递给 unset

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

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

编辑:

另一种更优雅的方法如下:

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

0
投票

以下所有代码片段都将从提供的输入数组中产生相同的所需结果。 演示

使用无体循环创建一个新数组。

$result = [];
foreach ($params as ['name' => $k, 'value' => $result[][$k]]);
var_export($result);

使用迭代块和组合创建一个新数组。

var_export(
    array_map(
        fn($row) => array_combine(...array_chunk($row, 1)),
        $params
    )
);

使用迭代硬编码声明创建一个新数组。

var_export(
    array_map(
        fn($row) => [$row['name'] => $row['value']],
        $params
    )
);

不使用一级键,通过引用修改原始数组。

foreach ($params as &$row) {
    $row = [$row['name'] => $row['value']];
}
var_export($params);

-3
投票

请尝试这个:

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

$params = $nary;
© www.soinside.com 2019 - 2024. All rights reserved.