我用什么PHP数组函数来转换多维关联数组

cal*_*die 1 php arrays multidimensional-array

我想转换它.

$data1 = array(
    array('value' => '100.00', 'total' => '32'),
    array('value' => '10.00', 'total' => '13'),
    array('value' => '200.00', 'total' => '39'),
    array('value' => '190.00', 'total' => '11'),
);
Run Code Online (Sandbox Code Playgroud)

进入这个

$data2 = array(
    'value' => array(0 => '100.00', 1 => '10.00', 2 => '200.00', 3 => '190.00'),
    'total' => array(0 => '32', 1 => '13', 2 => '39', 3 => '11')
);
Run Code Online (Sandbox Code Playgroud)

我可以通过迭代顶部数组,然后附加到一系列数组,以迂回的方式做到这一点,但我认为必须有一个我不知道的php数组函数可以更简洁地做到这一点.

http://www.php.net/manual/en/ref.array.php

值是浮点数和整数(如果它有任何区别),我只是在示例代码中将它们添加为字符串,因为它更容易读取IMO.最终数组顺序应与初始顺序匹配.我会给予最少LOC的正确答案,提供的性能并不比"长"版本差得多.PHP 5.4.

Mat*_*hew 5

如果PHP有一个array_pluck函数,那就很简单了.

function array_pluck(array $array, $field)
{
  return array_map(function($row) use ($field) { return $row[$field]; }, $array);
}

$data2 = array(
  'value' => array_pluck($data1, 'value'),
  'total' => array_pluck($data1, 'total')
);
Run Code Online (Sandbox Code Playgroud)

我认为这和阅读一样简单,但是你会在每个场上循环整个数组,因此它不是最佳解决方案.

就个人而言,这种情况我可能会坚持使用foreach解决方案,但尝试将其包含在一些可重用的功能中.

  • PHP 5.5可能将它作为`array_column()`:https://wiki.php.net/rfc/array_column (3认同)