RumusBin
@RumusBin
Живу, учусь, не стесняюсь

Как убрать пустые элементы при переборке массива php?

Доброго времени форумчане.
Значит столкнулся с неожиданной проблемой.
Вывожу список контактов на страницу, каждому соответствует номер телефона. Но контакт может иметь несколько номеров. Для реализации вывода одного контакта и нескольких номеров с ним, пришло в голову написать цикл для сравнения содержимого массива с телефонами и массива с контактами, и при совпадении содержимого в ячейках ['user_id'] == ['id'] печатаем содержимое ячейки ['phone_number'] в выпадающий список ну вот так это выглядит (это кусок цикла который находится в другом цикле):
<select phones="phones">   
                <?php foreach ($numbers as $number):?>
                    <option value="phone-number">
                        <?php if($contact['id'] == $number['contact_id'])
                            echo $number['phone_number'];?>
                </option>
                <?php endforeach;?> 
            </select>

Так вот вся неудобность этого метода в том, что цикл проходит по всем ячейкам массива номеров телефона и если совпадений нет, то просто печатает пустую строку. Я думал он же будет выводить строку только если совпадение будет найдено.
Можно ли как то запретить циклу печатать пустые строки?
  • Вопрос задан
  • 325 просмотров
Решения вопроса 1
@firm
Можно
<?php if($contact['id'] == $number['contact_id']): ?>
<option value="phone-number">
     <?php echo $number['phone_number'];?>
</option>
<?php endif;?>


Еще вариант:
<?
$arr_numbers =  array();
foreach ($contacts as $contact)
{
   foreach ($numbers as $number)
   {
    if($contact['id'] == $number['contact_id']) $arr_numbers[]= $number['phone_number'];
   }
}
?>

<?php if(count($arr_numbers ) > 0): ?>
<select phones="phones">   
                <?php foreach ($arr_numbers as $number):?>
                    <option value="phone-number">
                        <?=$number['phone_number'];?>
                </option>
                <?php endforeach;?> 
</select>
<?php endif;?>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
$contact['id'] == $number['contact_id']
совсем не гарантирует что $number['phone_number'] существует и не пустой
Не зная массива сложно что-то посоветовать, но попробуйте так:
if(($contact['id'] == $number['contact_id']) and !empty($number['phone_number']))
        echo $number['phone_number'];?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы