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