Задача
Функция возвращает несколько значений, но нам нужны лишь некоторые из них.
Решение
Пропустить переменные позволяет функция 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
}
Будьте внимательны, чтобы не ошибиться при подсчете количества за-
пятых.