从多维数组中获取值的总和

4

我需要帮助计算数组中值的总和,我已经尝试了很多方法,比如使用array_sum()函数,但是出现了错误,显示这个函数需要一个数组参数。我还尝试过$value3+=$value3,但是结果不正确。以下是我的代码:

var_export($_POST['guests']);
echo "<br />";
foreach($_POST['guests'] As $key1 => $value1){
    foreach($value1 As $key2 => $value2){
        foreach($value2 As $value3){

        }

    }
    echo "Room Type: " . $key1 . " No. of Rooms: " . $key2 . " No. of Guest: " . array_sum($value3) . "<br /> ";

}

以下是此操作的结果:

array ( 1 => array ( 2 => array ( 0 => '1', 1 => '2', ), ), 2 => array ( 1 => array ( 0 => '4', ), ), )

警告:array_sum()函数期望参数1是数组,但在C:\xampp\htdocs\nation\reservation-form3.php的第14行给出的是字符串。 房间类型:1 房间数量:2 客人数量: 警告:array_sum()函数期望参数1是数组,但在C:\xampp\htdocs\nation\reservation-form3.php的第14行给出的是字符串。 房间类型:2 房间数量:1 客人数量:

通过 $value3+=$value3,你的意思是 $value3=$value3+$value3...当然这有点令人困惑,使用 *= 代替 += 更好。所以 $value3*=2 等同于 $value3=$value3 * 2 - marc_s
那么我们对这个问题的进展如何了? - Rizier123
3个回答

3
使用PHP的RecursiveArrayIteraorRecursiveIteratorIterator类,
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($input));
$sum = array_sum(iterator_to_array($it, false));

重要提示:请注意,iterator_to_array() 函数的第二个参数是 false,这意味着在将递归迭代器转换为数组时,“不使用数组的默认键”。如果将其设置为 true(默认情况下总是如此),具有相同键的成员的子数组将覆盖生成数组的成员,您将看到意外的结果。

如果将显示的数组作为 $input 传递给此函数,则 $sum 将为 7


2
这应该对你有帮助:
只需使用array_walk_recursive()循环遍历所有数组值,然后将其添加到您的总和中,例如:
$sum = 0;
array_walk_recursive($array,function($v, $k)use(&$sum){
    $sum += $v;
});

echo $sum;

所以,使用这个方法,你甚至不必担心你的数组的深度。

1

我想你想要这样

   $_POST['guests'] = array ( 
   // RoomType => ( RoomNum => ( GuestList 
   // though i don't understand why guests in room are array
   // But no. of room can't be zero :) 
   1 => array ( 2 => array ( 0 => '1', 1 => '2', ), ), 
   2 => array ( 1 => array ( 0 => '4', ), ), );

echo "<br />";
foreach($_POST['guests'] As $key1 => $value1)          // Loop with RoomType
    foreach($value1 As $key2 => $value2)      // Loop with RoomNum
      echo "Room Type: " . $key1 . 
           " No. of Rooms: " . $key2 . 
           " No. of Guest: " . array_sum($value2) . "<br />";

结果
<br />
Room Type: 1 No. of Rooms: 2 No. of Guest: 3<br />
Room Type: 2 No. of Rooms: 1 No. of Guest: 4<br />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接