Php 如何在多级foreach中构建自定义数组?
这是原始数据Php 如何在多级foreach中构建自定义数组?,php,arrays,multidimensional-array,foreach,Php,Arrays,Multidimensional Array,Foreach,这是原始数据 Array ( [name] => me [tickets] => Array ( [1] => Array ( [equipment] => Array ( [1] => Array
Array
(
[name] => me
[tickets] => Array
(
[1] => Array
(
[equipment] => Array
(
[1] => Array
(
[name] => DVR
[received] => 10
)
[2] => Array
(
[name] => DCT
[received] => 3
)
)
)
[2] => Array
(
[equipment] => Array
(
[1] => Array
(
[name] => DVR
[received] => 4
)
[2] => Array
(
[name] => DCT
[received] => 6
)
)
)
)
)
用户有多张票据,但每张票据都有相同的项目,且“收到”的金额不同。我想将收到的金额相加为一个变量/数组
这里是一个演示,我想让它像这样工作
Array
(
[name] => me
[equipment] => Array
(
[DVR] => 14
[DCT] => 9
)
)
这是我最近一次从多维数组构建自己的数组的失败尝试
foreach($data as $user){
$sum = [];
$sum['name'] = $user->name;
$sum['equipment'] = [];
foreach($user->tickets as $ticket){
foreach($ticket->equipments as $eqpt){
$sum['equipment'][$eqpt['name']] += $eqpt['pivot']['received'];
}
}
print_r($sum);
}
请尝试以下代码。但是,$data中只有一个用户,所以需要执行$data=[$data];首先 PHP数组是通过 可能是$ticket->devices中有一个输入错误。 试试这个:
好吧,经过大量的谷歌搜索和反复试验,这似乎是可行的
$sum = [];
// $data is a collection returned by Laravel
// I am converting it to an array
foreach($data->toArray() as $user){
$items = [];
foreach($user['tickets'] as $ticket){
foreach($ticket['equipments'] as $eqpt){
$name = $eqpt['name'];
if (! isset($items[$name]))
{
$items[$name] = $eqpt['received'];
} else {
$items[$name] += $eqpt['received'];
}
}
}
$sum[] = [
'name' => $user['name'],
'equipment' => $items
];
}
@Tsnori@Adrian Cid Almaguer你能把你的例子说得更简洁吗?@Tsnori-我已经清理了我的代码,使它更具可读性。我想将该用户集合中所有票据的所有设备的总和放入一个新的干净数组中。这是实际环境的一个非常基本的版本,有多个用户,每个用户有多个票据,每个票据有多个设备pivot被错误地留在那里,它是环境阵列中的实际级别。我得到的错误是未定义的索引:DVRdo您是否尝试我的答案?
$array = $data; //$data is your array
$sum = array('name' => $array['name'], 'equipment' => array());
foreach($array['tickets'] as $row) {
for($i = 0; $i < count($row); $i++) {
foreach($row['equipment'] as $infos) {
$sum['equipment'][$infos['name']] += $infos['received'];
//print_r($infos);
}
}
}
print_r($sum);
$sum = [];
// $data is a collection returned by Laravel
// I am converting it to an array
foreach($data->toArray() as $user){
$items = [];
foreach($user['tickets'] as $ticket){
foreach($ticket['equipments'] as $eqpt){
$name = $eqpt['name'];
if (! isset($items[$name]))
{
$items[$name] = $eqpt['received'];
} else {
$items[$name] += $eqpt['received'];
}
}
}
$sum[] = [
'name' => $user['name'],
'equipment' => $items
];
}