Популярность функции php implode говорит о ее чрезвычайной полезности и многих преимуществах даже перед обычной конкатенацией строк. Она дает достаточную гибкость для кодирования и многовариантность использования.
Особенности программирования при использовании конкатенации строк
Если текст объединяется с помощью конкатенации, то мы вынуждены подстраиваться при написании кода под строгую последовательность, с которой этот текст должен быть собран. Давайте рассмотрим на простом примере.
Вам будет интересно:Wuauclt.exe - что за процесс и является ли он вирусом
Программа будет помогать менеджерам учитывать наличие товара на складе магазина. Если товар закончился или почти закончился, появится кнопка "Заказать".
Подключаемся к базе данных.
$hostname="localhost"; $username="root"; $password=""; $dbname="my_database"; $usertable="my_table"; $yourfield = "product";
$con = mysqli_connect($hostname,$username, $password); mysqli_select_db($con, $dbname); mysqli_set_charset($con,"utf8");
$query = "SELECT * FROM $usertable";
$result = mysqli_query($con, $query); mysqli_close($con);
Содержимое базы данных:
Для начала соберем форму с помощью обычной конкатенацией строк:
$form = ''; $form .= '
';Вам будет интересно:CSS transitions: примеры анимации фона, текста, создания css-аккондеона input radio и затухающего "fade-out" текста
Такой метод требует соблюдения строгой последовательности записи, если необходимо поменять одну строку на другую, нужно переписывать код.
В таблице мы видим информацию о товаре, полученную из базы данных:
В данной форме трудно разобраться, какой товар заказывать, а какой продавать, поэтому конкатенация не подходит для больших объемов информации.
Гибкость и многовариантность использования функции implode()
Записывая строки в массив, а затем объединяя их с помощью php implode, мы получаем гораздо больше вариантов написания кода.
Перепишем наш код: удалим конкатенацию, вместо нее строки будут внесены в массив и собраны функцией implode():
$form = ''; $form .= '
';Допустим, нам нужна еще одна отдельная таблица для менеджеров, где ячейки "Заказать" и "Продать" должны быть отдельно. Благодаря php array implode мы можем манипулировать строками. Добавим дополнительные массивы и создадим еще одну форму:
$form_sklad='Склад '; $sale = array(); $zakaz = array(); $form_sklad .= '
';Собираем те же самые строки во вторую форму ($form_sklad). "Заказать" помещаем в массив $zakaz, а "продать" - в массив $sale. Следовательно, каждая единица товара окажется либо в массиве $sale, либо в $zakaz. Единица товара - это одна пара обуви определенного размера (от 38 до 42). Один ряд ($row['id']) в базе данных содержит товар одной и той же модели, но разных размеров, поэтому далее объединяем с помощью php implode все единицы товара одной модели в массивы $form_row_zakaz и $form_row_sale. Если осталась одна пара обуви одного размера, то такой товар окажется как в массиве $zakaz (товар заканчивается), так и в массиве $sale (продать последнюю пару этого размера).
Таким образом, нет необходимости создавать еще один цикл и переписывать строки снова и снова.
Все вместе выглядит так:
$form = ''; $form_sklad='Склад '; $sale = array(); $zakaz = array(); $form .= '
'; echo $form_sklad .= implode('', $form_row_zakaz).implode('', $form_row_sale).'';В результате получаем новую форму, где товар для заказа отдельно от товара для продажи.
Строки мы можем создавать в любом порядке, а затем с помощью числовых индексов массива определять их последовательность. Следующий пример демонстрирует это:
if( $key_product === "model"){ $product[3] = ''.$value_product.''; }else if( $key_product === "product"){ $product[2] = ''.$value_product.''; } else if( $key_product === 'gender' ){ if( $value_product === '1' ){ $product[1] = 'мужские'; }else{ $product[1] = 'женские'; } }else if( $key_product === 'color' ){ $product[4] = ''.$value_product.''; } ksort($product);
В данном примере строки будут выводится следующим образом: "мужские - ботинки - модель - цвет". Если поменять индексы, то последовательность вывода изменится, с помощью индексов очень легко менять их порядок следования.
Объединяем элементы массива $product с помощью php implode
$form_row_product[$row['id']] = implode(' ', $product);
и затем выведем на страницу, где это необходимо:
echo $form_row_product_string = implode('
', $form_row_product);
Объединение значений многомерных массивов в строки с помощью implode(), array_map() и array_column()
Чтобы получить любые строки в любом месте кода, создадим многомерный массив $row_product:
$row_product[$row['id']] = $product;
Теперь мы сможем вызвать значение массива с помощью array_map:
echo implode(', ', array_map(function ($entry) { $shoes = array($entry[3], $entry[1]); $shoes_string = implode(' ', $shoes); return $shoes_string; }, $row_product));
Последний пример выведет все модели обуви - мужские они или женские, можно вывести также цвет и все остальные значения из массива $product.
Если нужно получить только одно значение из $row_product, можно применить функцию array_column:
echo implode('', array_column($row_product, 3));
Таким образом, функция php implode предоставляет доступ ко многим возможностям массивов, которые полезно использовать для получения данных и манипуляции строк вывода, что освобождает нас от строгой последовательности конкатенации строк.
Весь код:
$hostname="localhost"; $username="root"; $password=""; $dbname="my_database"; $usertable="my_table"; $yourfield = "product";
$con = mysqli_connect($hostname,$username, $password); mysqli_select_db($con, $dbname); mysqli_set_charset($con,"utf8");
$query = "SELECT * FROM $usertable";
$result = mysqli_query($con, $query); mysqli_close($con);
$form = ''; $form_sklad='Склад '; $sale = array(); $zakaz = array(); $product = array(); $row_product = array(); $form .= '
'; echo $form_sklad .= implode('', $form_row_zakaz).implode('', $form_row_sale).''; echo $form_row_product_string = implode('', $form_row_product);
echo implode(', ', array_map(function ($entry) { $shoes = array($entry[3], $entry[1]); $shoes_string = implode('', $shoes); return $shoes_string; }, $row_product)); echo $array_column = implode('', array_column($row_product, 3));