【发布时间】:2014-12-25 19:56:43
【问题描述】:
几天前我问了一个question,得到了很好的回答,但现在我已经实施了解决方案并面临一些问题。 (感谢Oleg 走到这一步)
我正在尝试合并和求和以下数组:
Array
(
[Thursday] => Array
(
[Lunch] => Array
(
[Total] => 10
)
[Date] => 2015-12-31
)
)
Array
(
[Thursday] => Array
(
[Lunch] => Array
(
[Guarantees] => 231
)
[Date] => 2015-12-31
)
)
Array
(
[Friday] => Array
(
[Breakfast] => Array
(
[Total] => 1
)
[Date] => 2016-01-01
[Lunch] => Array
(
[Total] => 1
)
)
[Thursday] => Array
(
[Lunch] => Array
(
[Total] => 1
)
[Date] => 2015-12-31
)
)
我正在使用以下代码:
private function _merge( $arr1, $arr2, $arr3 )
{
$maxArraysCount = func_num_args();
$return = array();
for( $i = 1; $i < $maxArraysCount; $i++ ){
$arr = 'arr' . $i;
if( isset( $$arr ) && is_array( $$arr )){
foreach ( $$arr as $day => $value ) {
foreach ( $value as $meal => $time ) {
if( $meal == "Date"){
$return[$day][$meal] = $time;
} else {
foreach ( $time as $type => $count ) {
if( !isset( $return[$day][$meal][$type] ) )
$return[$day][$meal][$type] = 0;
$return[$day][$meal][$type] = $count + $return[$day][$meal][$type];
}
}
}
}
}
}
return $return;
}
它正在输出这个:
Array
(
[Thursday] => Array
(
[Lunch] => Array
(
[Total] => 11
)
[Date] => 2015-12-31
)
[Friday] => Array
(
[Breakfast] => Array
(
[Total] => 1
)
[Date] => 2016-01-01
[Lunch] => Array
(
[Total] => 1
)
)
)
此合并/求和数组中缺少信息。请注意,根本没有“保证”。好像arr1的优先级比arr3高?
【问题讨论】:
-
为什么不使用对象数组呢?我的意思是为每一天定义一个对象。我认为拥有不同结构的数组元素不是一个好主意。合并这些数组有什么意义?
-
也许,我不太了解这样做的好处。这是两个单独的查询,它们已被重组以在 TWIG 模板中使用。用 MySQL 合并这两个查询是不切实际的,所以我用 PHP 来做。
-
也许它很实用 :)。你能给出你正在从中查询的表格吗?
-
该查询是一个非常高级的 Propel 查询,我认为完全超出了这个问题的范围!如果这个问题没有切实可行的解决方案,我会从那个方向解决它......
-
我认为一种方法是为您的数组定义一种格式,然后更轻松地合并它们。我的意思是这样的: array('day_of_week'=>"" , 'date'=> "" , 'breakfast'=> "" , 'lunch' =>"" , 'dinner' => "") 这可能吗在你的软件逻辑中??
标签: php arrays multidimensional-array