Задачки по PHP

8.08K
.
(\/)____o_O____(\/)

Disco, завязывай. ты тут и так на грани фола находишься

.

Задача для тех кто хоть немного шарит в php:
Напишите свою функцию (нельзя использовать стандартную функцию count) которая подсчитывает количество элементов массива

.

Koenig, Блин я думал что-то по сложнее будет

.
The Frontend-Warrior
# Jahak (13.10.2015 / 14:15)
Напишите свою функцию (нельзя использовать стандартную функцию count) которая подсчитывает количество элементов массива
Где-то это я уже видел. Ты PHP не по видеоурокам от "Специалиста" учил?
.
The Frontend-Warrior
count() (+/-)
function myCount($array, $include_sub_array = false) {
    $count = 0;
    if(is_null($array))
        return 0;

    if(!is_array($array)){
        return 1;
    }

    foreach($array as $array_element) {
        if($include_sub_array && is_array($array_element)){
          $count += myCount($array_element, true);
        } else {
          $count++;
        }
    }

    return $count;
}

var_dump(myCount(null)); // 0

$test = [1,2,3,4,5];
var_dump(myCount($test)); // 5

$test[] = [6,7,8,[9,10,11]];

var_dump(myCount($test, false)); // 6
var_dump(myCount($test, true)); // 11
var_dump(myCount([], true)); // 0

Единственное, что меня смущает: если подмассив пустой, то нужно ли его считать в качестве элемента текущего массива? Это последний пример вызова функции
.

Jahak

Напишите свою функцию которая подсчитывает количество элементов массива

code (+/-)
<?php
function counting($arr = array()) {
    $sum = 0;
    foreach ($arr as $val) {unset($val); $sum++;}
    return $sum;
}

echo counting();
.

Blade

если подмассив пустой
мой вариант принимает пустой массив, и возвращает 0. А ещё можно вообще вызвать counting(); без аргумента, результат будет так же 0.
.

Blade, ты написал подсчёт любой вложенности? Кросавчег!

.
The Frontend-Warrior
# ДоХтор (13.10.2015 / 22:25)
Blade, ты написал подсчёт любой вложенности? Кросавчег!
да, ограничение по стеку вызовов функции

мой вариант принимает пустой массив, и возвращает 0.

с этим то всё понятно
А ещё можно вообще вызвать counting(); без аргумента, результат будет так же 0.

ну без параметра вызывать её нет смысла, короче будет 0 в коде прописать
.
Blade
The Frontend-Warrior

собна рабочая версия:

myCount() (+/-)

function myCount($array, $include_sub_array = false) {
    $count = 0;
    if(is_null($array))
        return 0;

    if(!is_array($array))
        return 1;
    

    foreach($array as $array_element) {
        if($include_sub_array && is_array($array_element)) {
          $sub_count = myCount($array_element, true);

          if($sub_count != 0) {
            $count += $sub_count;
          } else {  
            $count++;
          }

        } else {
          $count++;
        }
    }

    return $count;
}

var_dump(myCount(null)); // 0

$test = [1,2,3,4,5];
var_dump(myCount($test)); // 5

$test[] = [6,7,8,[9,10,11]];

var_dump(myCount($test, false)); // 6
var_dump(myCount($test, true)); // 11
var_dump(myCount([], true)); // 0
var_dump(myCount([[],[],[]])); // 3
var_dump(myCount([[],[],[]], true)); // 3
Всего: 270