Программирование PHP: сумма многомерного массива n-го уровня

1

Я застрял и не смог закодировать сумму многомерного массива с разными типами: ниже приведен пример.

$multi_dimes_array = array(
    "1"=>array
    (1,2,5,6,7),
    "2"=> "Apple",
    "3"=> array("1"=>array('some_more',
                'banana',
                'ship',array(1,5,6,7,array(4,4,4,4))))
);

Мой код выглядит так:

foreach ($multi_dimes_array as $val) {           
  if(is_array($val))
  {
    $total = $total + $val;
  }
}

но я получаю сообщение об ошибке.

  • 0
    что вы хотите суммировать? 1,2,5,6,7 или 4,4,4?
  • 0
    Я хочу вычислить сумму заданного массива. Это образец массива. У меня есть неизвестный массив n-го уровня, имеющий цифры и буквы.
Теги:

2 ответа

1

Вы должны реализовать рекурсивную функцию:

function deep_array_sum($arr) {
    $ret = 0;
    foreach($arr as $val) {
        if (is_array($val))
            $ret += deep_array_sum($val);
        else if(is_numeric($val))
            $ret += $val;
    }
    return $ret;
}
0

То, как я это вижу, требует рекурсивной функции или целого ряда fors, ifs и whiles. Так рекурсивно.

function array_sums($arraypart)
{
  if(!is_array($arraypart))
  {
   return intval($arraypart);
  }
  else
  {
      $sub_sum = 0;
      foreach($arraypart as $new_part)
      {
          $sub_sum += array_sums($new_part);
      }
      return $sub_sum;
  }
}

Что-то вроде этого? Это происходит так: если это не массив, попробуйте получить его целочисленное (или float) значение и вернуть его. (я видел, что у вас тоже есть строка, это может быть опасно, если не разобрать, на самом деле, как вы планируете добавлять строки?)

если это массив, foreach его элементов, снова вызовите функцию, суммируйте их возвращения и верните их сами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню