Разработчику. Сборник рецептов PHP
Задавайте вопросы

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

Вернуться назад

Задача

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

Решение

Пропустить переменные позволяет функция 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
}

Будьте внимательны, чтобы не ошибиться при подсчете количества запятых.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ