Николай Ланец
31 авг. 2014 г., 14:53

Типичная ошибка с explode

Наверняка многие, кто хоть чуть-чуть знает php, знает и замечательную функцию explode(). Она разбивает строку с указанным разделителем на элементы массива. И вот давайте рассмотрим типичную конструкцию:
/* Конвертировать значения через запятую в массив */ $items = explode(',', $items); /* Создание внутреннего HTML */ foreach ($items as $item) { $item = trim($item); $output .= "\n" . "<option value=\"{$item}\">{$item}</option>"); }
В чем же здесь ошибка? Здесь логическая ошибка - не проверяется на отсутствие значения $items. Чем это чревато? Тем, что как минимум один цикл foreach обязательно выполнится. Почему? Потому что explode всегда вернет массив минимум с одним, хоть и пустым элементом. Но пустое будет значение у этого элемента, но сам элемент будет, а значит массив уже не пустой. Вот попробуйте выполнить вот эту конструкцию:
print "<pre>"; $s = ''; var_dump($s); $s = explode(",", $s); var_dump($s); print count($s); foreach($s as $f){ var_dump($f); }
Результатом такой ошибки будет, к примеру, вот такой код:
<select name="size"><option value="">Выбрать размер</option> <option value=""></option> </select>
Как видите, здесь есть пустой элемент option.

Добавить комментарий