Пропуск определенных возвращаемых значений

Задача
Функция возвращает несколько значений, но нам нужны лишь некоторые из них.

Решение
Пропустить переменные позволяет функция list():

// Интересуют только минуты
function time_parts($time) {
return explode(':', $time);
}
list(, $minute,) = time_parts('12:34:56');


Обсуждение
Это похоже на ошибку в программе, но фрагмент кода из раздела «Решение» имеет в PHP полное право на существование. Чаще всего это встречается, когда программист выполняет цикл по массиву с помощью функции each(), но нужны ему только значения массива:

while (list(,$value) = each($array)) {
process($value);
}


Однако оператор foreach позволяет написать более понятный код:

foreach ($array as $value) {
process($value);
}


В целях уменьшения путаницы мы не очень часто прибегаем к этой функциональности, но если функция возвращает много значений, а нужны только одно или два из них, то этот способ может пригодиться. Вот один из таких примеров – поля считываются с помощью функции fgetcsv(), которая возвращает массив, содержащий поля строки.Код выглядит так:

while ($fields = fgetcsv($fh, 4096)) {
print $fields . "\n"; // третье поле
}


Если это описанная в коде функция, а не встроенная, то можно определить ключи возвращаемого массива в виде строк, поскольку трудно запомнить, например, что элементу 2 соответствует значение 'rank':

while ($fields = read_fields($filename)) {
$rank = $fields['rank']; // третье поле теперь называется rank
print "$rank\n";
}


Однако ниже показан более эффективный метод:

while (list(,,$rank,,) = fgetcsv($fh, 4096)) {
print "$rank\n"; // непосредственно присваиваем $rank
}


Будьте внимательны, чтобы не ошибиться при подсчете количества за-
пятых.
Теги:
fields, value, while, функция, fgetcsv, возвращает, нужны, print, process, Однако, rank , третье, parts, foreach, позволяет, массива, функции, помощью, array, поле , Пропуск, определить, выглядит, строки, массив, считываются, можно, поскольку, ключи, показан, подсчете, ошибиться, чтобы, внимательны, Будьте
Добавлено: 21 Июля 2018 13:34:27 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...