Двойной foreach
эта позиция должна выводить три продукта а выводит только первый Лонгория-3.
Вот код поиска .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
public function search($q){ $mysqli = $this->db->getMysqli(); $goods = [];//результирующий массив $find_title = $this->find_entry_title($this->getTitleCategory(),$q);//масив совпадений return $find_title; foreach ($find_title as $key=>$value): /*если $value - массив*/ if(mb_stripos($value,",")){ $value_arr = explode(",",$value); foreach($value_arr as $item): $query = "SELECT * FROM ".$this->config->db_prefix.$key." WHERE title = '$item'"; $result_set = $mysqli->query($query); $row = $result_set->fetch_assoc(); if($row) $goods[] = $row; endforeach; }/*если $value - не массив*/ else{ $query = "SELECT * FROM ".$this->config->db_prefix.$key." WHERE title = '$value'"; $result_set = $mysqli->query($query); $row = $result_set->fetch_assoc(); $goods[] = $row; } endforeach; return $goods; }
двойной foreach
привет. есть два массива $ar1 $ar2 нужно через foreach добавлять строки в $str по очереди.
Foreach внутри foreach
Посетители сайта видят список альбомов в мозаичном виде по 3 альбома в ряд, 12 альбомов на.
FOREACH
Доброго времени всем! есть таблица в БД, как на странице прорисовать с помощью foreach CREATE.
Foreach
Добрый день. Помогите пожалуйста ..как можно добавить в этот кусок кода такое что если у test_id.
morik1969, я не уверен, что мой пример решает вашу проблему, но судя по заголовку «двойной foreach» предполагаю, что вам нужно нечто вроде такого:
1 2 3 4 5 6 7 8 9 10 11 12
$arr = [ 'sofas' => 'ЛОНГОРИЯ-3 , ЛОНГОРИЯ , ЛОНГОРИЯ-4', 'corners' => 'ЛОНГОРИЯ-2', 'chairbeds' => 'КР-КРОВАТЬ ЛОНГОРИЯ' ]; foreach ($arr as $key => $item) { echo $key, ': '; foreach (explode(',', $item) as $word) { echo trim($word), '
'; } }
Цикл FOREACH в PHP
С помощью цикла FOREACH мы можем перебрать все элементы массива и выполнить для них (или только для некоторых из них) какие-либо действия.
Например, так будет выглядеть вывод названий всех товаров:
'Товар1', 'price' => 1000]; $products[] = ['name' => 'Товар2', 'price' => 2000]; $products[] = ['name' => 'Товар3', 'price' => 3000]; $products[] = ['name' => 'Товар4', 'price' => 4000]; foreach($products as $product) echo $product['name'] . '
';
Товар1 Товар2 Товар3 Товар4
Всего 2 строчки кода для вывода всех элементов! А теперь разберёмся, как это работает.
Принцип работы цикла FOREACH
Когда мы запускаем цикл, PHP берёт первое значение массива 5 и помещает его в переменную $value. Затем один раз выполняется блок кода echo $value; . Затем PHP делает тоже самое со вторым значением, третьим и т.д.
Получается, команды, принадлежащие циклу FOREACH, будут запущены для каждого элемента отдельно.
Для добавления нескольких команд нужно поместить их в фигурные скобки. Попробуем вывести названия товаров, цена которых выше 1000:
'Товар1', 'price' => 1000]; $products[] = ['name' => 'Товар2', 'price' => 2000]; $products[] = ['name' => 'Товар3', 'price' => 3000]; foreach($products as $product) < if($product['price'] >1000) echo $product['name'] . '
'; >
Получение доступа к ключам массива выглядит следующим образом:
Перебор многомерного массива
Создадим обычный двумерный массив:
Если нужно перебрать элементы только одного подмассива, мы можем сделать так:
foreach($arr['title3'] as $value) echo $value, '
';
Если требуется вывести все подмассивы, мы можем использовать два цикла foreach, один внутри другого:
$values) < echo 'Title: ', $title, '
'; foreach($values as $value) echo 'Value: ', $value, '
'; echo '
'; >
Title: title1 Value: 5 Value: 10 Value: 15 Title: title2 Value: 48 Value: 12 Value: 0 Title: title3 Value: 17 Value: 24 Value: 1280
Задача №1
1. Создайте массив $arr и заполните его тремя значениями.
2. С помощью цикла foreach выведите все ключи и значения этого массива. Между ключом и значением должна быть строка -> , а между элементами — перенос строки (тег
).
Задача 2
Выведите ключ и набор значений для каждого элемента верхнего уровня. Т.е. в браузере должно отобразиться следующее:
Ключ: 0 | Значения: 1, 2, 3 Ключ: 1 | Значения: 4, 5, 6 Ключ: 2 | Значения: 7, 8, 9
Важно: между значениями должны быть запятые, но перед первым и после последнего их быть не должно. 1,2,3 правильно, 1,2,3, не правильно.
Форум PHP программистов ► PHP практикум ► PHP для начинающих
Профиль
Группа: Пользователи
Сообщений: 4
Пользователь №: 38529
На форуме:
Карма:
Добрый день! Помогите разобраться с кодом. Файл «sites.txt» = список сайтов, «content.txt» = контент построчный.
$sites = array();
$sites = file($path_to_sites, FILE_IGNORE_NEW_LINES);
$contents = array();
$contents = file($path_to_contents, FILE_IGNORE_NEW_LINES);
foreach ($sites as $site)
if (trim($site) == «»)
continue;
foreach ($contents as $content)
if (trim($content) == «»)
continue;
Смысл в том, что для первой строчки sites.txt берем первую строку файла content.txt, для второй строки sites.txt вторую строку content.txt.
А у меня получается что для любой строки файла sites.txt, всегда подставляется первая строка файла content.txt.
Помогите пожалуйста, начинающему.
Профиль
Группа: Пользователи
Сообщений: 4
Пользователь №: 38529
На форуме:
Карма:
Сообщений: 474
Пользователь №: 37895
На форуме:
Карма: 22
Профиль
Группа: Пользователи
Сообщений: 4
Пользователь №: 38529
На форуме:
Карма:
Сообщений: 474
Пользователь №: 37895
На форуме:
Карма: 22
$sites = array(1,2,3,4,5);
$contents = array(1,2,3);
$maxcount = max(count($sites), count($contents));
for ($i=0; $i $maxcount; $i++)
if (empty($sites[$i]) || empty($contents[$i]))
continue;
>
echo "For the sites #$i (".$sites[$i].") contents:".$contents[$i]."
";
>
Профиль
Группа: Пользователи
Сообщений: 4
Пользователь №: 38529
На форуме:
Карма:
Сидел он, дум великих полон — и вдаль глядел
Сообщений: 15860
Пользователь №: 4190
На форуме:
Карма: 490
falloutvetal, так у тебя одной строке одного файла соответствует строго одна строка другого файла, с тем же порядковым номером. А зачем такой изврат?
Во-первых, если уж и использовать файлы, то хоть в одном всё собрать.
А во-вторых, тут «просится» работа с БД. И это будет более правильно, более просто и более удобно.
* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.
* «накапливаю умение телепатии» (С) и «гуглю за ваш счет» (С)
php foreach на два разных массива
Проблема в том, что ключи у массивов разные. Как вы видите, один имеет 0, 1, второй — 21624 и 21625. В итоге получаю вывод $key как 0 и 1 и получаю только один массив. Массивов всего два, но на каждой странице сайта разные ключи и нужно универсальное решение. Задача — вывести рядом в одном foreach элементы как первого, так и второго массивов. Подскажите, как это лучше сделать?
foreach($keys as $key => $value)<
делаем что угодно с первым
foreach($keys[‘$key’] as $key2 => $value2)
<
и со вторым
>
>
SONcemvo, спасибо. Но у меня выдало ошибку «warning: Invalid argument supplied for foreach() in» да и печатает такой код немного неправильно. Получается foreach внутри другого foreach и он два раза печатает второй массив, а должен один раз.
$keys1 = первый_массив;
$keys2 = второй_массив;
foreach (array_merge($keys1, $keys2) as $key=>$value)
<
. действия.
>
Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1
А еще в php есть такая фишка $array3 = $array1 + $array2; 🙂
Однако тут явно была оказана помощь в изготовлении костылей, ибо диагноз: нарушение нормализации.
Спасибо за советы, но опять всё мимо ))) Задача в том, чтобы вывести элементы массива в таблицу в определенном порядке. Грубо говоря так: массив1[0] массив2[21624] массив1[1] массив2[21625] В массивах информация о прикрепленных к материалу сайта файлах. Один массив держит инфу о файлах в обёртке с инсталлятором, второй — обычные архивы. Задача в том, чтобы дать ссылку на инсталлятор, а ниже или рядом — на архив. Вывод в обычной html таблице. Можно конечно сделать две таблицы, с разными foreach, но тогда получается очень громоздко, а место хотелось бы сэкономить.
✅ Трастовых площадок под размещение статей и ссылок. Опыт 15 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Новый аналог AllSubbmitter (заполнение форм) https://getmanylinks.ru/getmanysubmits.html (Бесплатное демо)
Решил задачу. Ниже для тех, кому интересно. Создал новый массив со всеми ключами через array_keys(); Грубо говоря так: $array1 = array(0=000, 1=111); $array2 = array(21624=aaa, 21625=bbb); $keys = array_keys($array2); $keys получается содержит array(0=21624, 1=21625); И далее в уже готовый foreach можно вставлять $array2[$keys[0]] Но в моём примере массивы многомерные, поэтому в foreach выводится всё вот так: $array2[$keys[0]]->element1; $array2[$keys[0]]->element2; $array2[$keys[0]]->elementN;
Два цикла foreach в один в PHP?
Я мог бы сделать вложенный foreach следующим образом:
foreach ($arrayone as $key => $value) < echo "$value
"; foreach ($arraytwo as $keysub => $valuesub) < # code. if($keysub === $key) < echo "$valuesub
"; > > >
это прекрасно работает, но я думаю, что это не самый эффективный способ, поскольку он проходит через второй массив для каждого элемента в первом. Это кажется неправильным.
Как сделать это более эффективным?
4 ответа
Используйте разумную структуру данных:
$content = array_map(null, $arrayone, $arraytwo); foreach ($content as $entry) < printf('%s
', $entry[0]); printf('%s
', $entry[1]); >
$content = array_combine($arrayone, $arraytwo); foreach ($content as $title => $body) < printf('%s
', $title); printf('%s
', $body); >
Вы можете просто использовать один для цикла:
for ($i = 0; $i < count($titlesArray); $i++) < echo "".$titlesArray[$i].""; echo "".$paragraphsArray[$i]."
"; >
Поскольку все очевидные ответы уже были опубликованы, вот еще один способ сделать это
foreach (array_combine($arrayone, $arraytwo) as $title => $content) < printf('%s
%s
', $title, $content); >
Предполагая, что вы правильно настроили массивы, чтобы всегда иметь одинаковый порядок и количество элементов:
Вы бы лучше с более разумным форматом массива, хотя:
$array = [ ['title' => 'Title one', 'content' => 'Content one'], ['title' => 'Title two', 'content' => 'Content two'], ];