OrmaJever пишет:Что за хипстерство, какой foreach?
Хм, ладно. Без foreach:
(Добавление)
Zeross пишет:Оууу ребят тут тема не о том как написать функцию count
Дайте поразвлекаться чуток
(Добавление)
Zeross пишет:практики нет совсем)
Потому и не получается.
Пишите. Пишите что-нибудь.
Могу сказать, что в начале и меня ставили в тупик простейшие задачи. Вроде понятно, что надо написать, а вот как?..
Мелкий, драсьте. А второй аргумент забыли? ))
PHP:
скопировать код в буфер обмена
function myCount
(array $rgInput, $rec = false) {
$iCount = 0;
foreach ($rgInput as $val)
{
{
$iCount = $iCount + myCount($val, $rec);
}
++$iCount;
}
return $iCount;
}
$array[] = 'Вася';
$array[] = 'Петя';
$array[] = 'Дима';
$array[] = 'Я';
$array[] = array('Антон','25 лет','Не судим');
echo myCount($array); //5
echo myCount($array, 1); //8
Zeross, спэшл фо ю, по строчкам:
1) Объявляем функцию. Указываем, какие аргументы нам нужны. В нашем случае аргумент
$rgInput (сам массив, в котором нужно посчитать кол-во элементов) и необязательный аргумент
$rec, который дает возможность посчитать все элементы многомерного массива. Если в списке аргументов присутствует оператор присваивания
($rec = false), это и означает, что параметр не обязательный.
3) Объявляем переменную, которая послужит нам счетчиком, и занесем в нее ноль. Мы же еще ничего не подсчитали, так?
5) В цикле перебираем элементы массива по одному (в одном уровне).
8) Проверяем, нужно ли считать уровни ниже. Если нужно, то проверяем, является ли текущий элемент массива массивом (масло масляное)) ).
Если да, то
11) Вызываем эту же функцию внутри нее самой (рекурсия). Она делает свои дела, и возвращает нам количество элементов уровнями ниже. Прибавляем число, возвращенное нашей ф-ей к нашему счетчику.
15) Прибавляем к нашему счетчику единицу. Это же тоже элемент массива, верно?
19) Возвращаем наш счетчик.
Проверяем. Заполним белибердой многомерный массив (
22 - 26).
Вызываем нашу ф-ю, в которую передаем только первый аргумент - наш массив (
28). Получаем 5. Все верно.
Вызываем нашу ф-ю, в которую передаем наш массив и второй аргумент, который подсчитает все элементы многомерного массива. Получаем 8. Все верно. Мы молодцы)
Мелкий пишет:Тот же array(null); сломает весь мир.
array(null) не сломает весь мир если написать current($arr) !== false, но тут же проблема, а что если в массиве будет false? Например
вернёт 2, потому что упёрся в false. Тупиковая ситуация какая-то
Плохая идея считать элементы Сишной структуры не имея к ней доступа
Используя array_keys или подобные встроенные функции мне кажется тоже не очень честно, но с другой стороны по другому не как