我想转换它。
$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'),
);
进入这个
$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')
);
我显然可以通过迭代顶部数组,然后附加到一系列数组,以迂回的方式做到这一点,但我认为必须有一个我不知道的php数组函数可以做到这一点简明地。
http://www.php.net/manual/en/ref.array.php
值是浮点数和整数(如果它有任何区别),我只是在示例代码中将它们添加为字符串,因为它更容易读取IMO。最终数组顺序应与初始顺序匹配。我会给予最少LOC的正确答案,提供的性能并不比“长”版本差得多。 PHP 5.4。
答案 0 :(得分: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')
);
我认为这和阅读一样简单,但是你会在每个字段上循环整个数组,所以它不是最佳解决方案。
就个人而言,我可能会坚持使用foreach
解决方案但尝试将其包含在一些可重复使用的函数中。
答案 1 :(得分:3)
<?php // php 5.4 array syntax
$new = array_reduce($data1, function (&$result, $item)
{
$result['value'][] = $item['value'];
$result['total'][] = $item['total'];
return $result;
},
['value' => [], 'total' => []]);
'value'和'total'是任意名称,所以你不会得到一个单行的php库函数来执行此操作。
如果您想要...,您可以将此代码重构为函数。
function array_rotate($data) {
$k = array_keys($data[0]);
return array_reduce($data, function (&$r, $i) use ($k) {
$r[$k[0]][] = $i[$k[0]];
$r[$k[1]][] = $i[$k[1]];
return $r;
}, [$k[0] => [], $k[1] => []]);
}
我概括了@ matthew的代码,这允许任意数量的键(而不是2):
function array_rotate2($data) {
return array_combine(array_keys($data[0]),
array_map(function ($field) use ($data) {
return array_map(function($row) use ($field) { return $row[$field]; }, $data);
}, array_keys($data[0])));
}
答案 2 :(得分:1)
你可以在没有使用简单的foreach()的函数的情况下完成它:
<?php
$data = 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'),
);
$newArray = array();
$i=0;
foreach($data as $value){
$newArray["value"][] = $data[$i]["value"];
$newArray["total"][] = $data[$i]["total"];
$i++;
}
echo "<pre>";
print_r($newArray);
echo "</pre>";
?>
打印出来:
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
)
)
答案 3 :(得分:1)
$final = array();
foreach($data1 as $array) {
foreach($array as $key => $value) {
$final[$key] = isset($final[$key]) ? $final : array();
$final[$key][] = $value;
}
}
答案 4 :(得分:1)
像其他人一样说我不认为有一个单行。这是一个可重用的foreach函数,应该可以正常工作
function array_multi_key_combine($a, $keys = array()) {
$b = array();
foreach($a as $v) {
foreach($keys as $k) {
if(isset($v[$k])) $b[$k][] = $v[$k];
}
}
return $b;
}
$data2 = array_multi_key_combine($data1, array('value', 'total'));