Есть, скажем, такой массив: Код (Text): <?php $a=array(1, 1, 1, 1, 1); $array=array(1, 8, 3, $a, 2, 18); $array2=array(5, 3, $array, 2, 1); echo "<pre>"; print_r($array2); echo "<pre>"; ?> Код (Text): Array ( [0] => 5 [1] => 3 [2] => Array ( [0] => 1 [1] => 8 [2] => 3 [3] => Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 1 [4] => 1 ) [4] => 2 [5] => 18 ) [3] => 2 [4] => 1 ) Ну и, скажем, не создавая функций и не используя count, надо подсчитать все элементы в массиве. Я вчера что-то нагородил бестолковое: Код (Text): <?php $a=array(1, 1, 1, 1, 1); $array=array(1, 8, 3, $a, 2, 18); $array2=array(5, 3, $array, 2, 1); $len=0; $i=0; metka1: if is_null($array2[$i]){ $array2=$temp; $i=tempi+1; goto metka2; } elseif is_array($array2[$i]){ $temp=$array2; $tempi=$i; $array2=$array2[$i]; $i=0; } else { $len++; $i++; } goto metka1; metka2: echo $len; ?> Но не могу дальше сообразить. Например все вложенные массивы и их количество можно записывать в другой массив. Но как потом выйти из этой конструкции? Если количество вложений ==0 goto metka2? Голова не работает, выручайте, а то я успокоиться не могу. Добавлено спустя 2 минуты 24 секунды: У Попова, про goto вообще ничего нет
culcArr($yourArray); function calcArr($arr){ $num =0; If (is_array($arr)){ foreach($arr as $el) $num += calcArr($el); } else { return 1; } return $num; } И это правильно
Блина.. Ну тогда так $a=array(1, 1, 1, 1, 1); $array=array(1, 8, 3, $a, 2, 18); $array2=array(5, 3, $array, 2, 1); $num=0; $newArr = $array2; while(!empty($newArr)){ foreach($newArr as $k=>$val){ if (is_array($val)){ $newArr[] = $val; } else { $num += 1; } unset($newArr[$k]); } } Print $num; Как-то так. Но без готу Го ту ф топку Хотя можно в конце цинично послать прогу к точке, где принт стоит. Помоему это будет самый удачный вариант использования го ту в даном контексте
Ну оформи то же самое. Только циклы условием замени и гото поставь в конце моих циклов, которые к его началу будут отсылать
ну так этта, добро пожаловать в новый век я, признаться, то же долго не мог понять, что $this-> что то там, в классе, это означает go to та самая строка в бейсике
Допустим, можно использовать только оператор goto, каким образом тогда можно проверить, что какой-то элемент массива содержит массив? Если использовать только оператор goto и какой-нибудь цикл, тогда, думаю, реально сделать...
Нет, надо делать то же самое, что происходит при рекурсии с помощью функции: у каждой функции свой немспейс, после вызова функция получает копию элемента, который является массивом, поэтому переменные не перекрывают друг друга. Чтобы сделать то же самое в пределах одного неймспейса, надо генерировать имена переменных на лету. Код (PHP): $a=array(1, 1, 1, 1, 1); $array=array(1, 8, 3, $a, 2, 18); $array2=array(5, 3, $array, 2, 1); var_dump($array2); $count = 0; $level = 0; $vname = 'level'.$level; $$vname = $array2; itr: $current = current($$vname); if (is_array($current)) { $level++; $vname = 'level'.$level; $$vname = $current; goto itr; } else { $count++; } nxt: if (!next($$vname)) { if (!$level) { goto quit; } $level--; $vname = 'level'.$level; if (!next($$vname)) { goto nxt; } } goto itr; quit: echo 'Result: '.$count; Код (Text): array(5) { [0]=> int(5) [1]=> int(3) [2]=> array(6) { [0]=> int(1) [1]=> int(8) [2]=> int(3) [3]=> array(5) { [0]=> int(1) [1]=> int(1) [2]=> int(1) [3]=> int(1) [4]=> int(1) } [4]=> int(2) [5]=> int(18) } [3]=> int(2) [4]=> int(1) } Result: 14