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

Как перебрать сразу два массива php?

Доброго времени суток. Продолжаю изучение основ php!
В решении задачи пришел к необходимости перебрать два массива ... лучше на примере объяснить:
Суть вопроса такова -
в модель попадает два массива, один с id ($data_id) другой с номерами телефонов ($data_numbers).
массивы индексные, значение в массиве $data_id[0] соответствует значению в массиве ($data_numbers[0]).
Нужно в БД записать в соответствующие таблицы номера телефона согласно их id
(ну вроде бы понятно изложил.)
Ничего лучшего не придумал как перебирать эти массиву двумя вложенными циклами foreach присваивая их значения переменным и создавая каждый раз запрос к БД вот код:
foreach ($data_id as $id){
            foreach ($data_numbers as $number){
                $db = Db::getConnection();
                $sql = 'UPDATE phone_numbers SET phone_number = :number '
                . 'WHERE id = :id';
        
                $result = $db->prepare($sql);
                $result->bindParam(':number', $number, PDO::PARAM_INT);
                $result->bindParam(':id', $id, PDO::PARAM_INT);
                
                return $result->execute();
            }
        }

Но затея провалилась (как Вы понимаете) записывается только первый элемент в БД остальные игнорируются.
Как можно воплотить в жизнь такую затею?
Спасибо.
  • Вопрос задан
  • 1663 просмотра
Решения вопроса 1
@SharuPoNemnogu
не язык плохой, программисты такие...
у тебя return стоит, вот и выходит после первого элемента, убери его.

prepare вынеси из цикла, поставь перед ним, зачем делать каждый раз одно и тоже.

сделать один массив можно через функцию array_combine, получится id => number массив, ну либо так как Максим Тимофеев предложил.

bindParam привязывает ссылку на переменную, bindValue - значение переменной, что тут актуальней
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
foreach ($data_id as $key=>$id){
$id; //это первый массив
$data_numbers[$key]; //это второй массив
}
Ответ написан
Ваш ответ на вопрос

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

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