Вы можете использовать аргументы переменной длины variadic
в PHP> = 5.6
Option1
$items = [["1.","COTV_LITE(1800)"],["2.","COTV_PREMIUM(2200)"]];
echo implode(' ',array_merge(...$items));
Вывод
1. COTV_LITE(1800) 2. COTV_PREMIUM(2200)
Этоэто больше precursor
для следующей опции.
Option2
Если вы хотите немного более креативно, вы также можете использовать preg_replace
:
$items = [["1.","COTV_LITE(1800)"],["2.","COTV_PREMIUM(2200)"]];
$replace = [
'/^(\d+\.)$/' => '<li>\1 ',
'/^(\w+\(\d+\))$/' => '\1</li>'
];
echo '<ul>'.implode(preg_replace(array_keys($replace),$replace,array_merge(...$items))).'</ul>';
Выход
<ul><li>1. COTV_LITE(1800)</li><li>2. COTV_PREMIUM(2200)</li></ul>
Option3
И, наконец, использование упорядоченного списка ol
, который делает цифры за вас.В этом случае нам нужен только второй элемент из массива (индекс 1):
$items = [["1.","COTV_LITE(1800)"],["2.","COTV_PREMIUM(2200)"]];
echo '<ol><li>'.implode('</li><li>',array_column($items,1)).'</li></ol>';
Вывод
<ol><li>COTV_LITE(1800)</li><li>COTV_PREMIUM(2200)</li></ol>
Лично я бы поставил его в ol
таким образом, чтобы выне нужно беспокоиться о порядке чисел, вы можете позволить HTML + CSS обрабатывать их.Кроме того, это, вероятно, самый простой и наиболее семантически правильный способ, но я не знаю, имеет ли нумерация в массиве какое-либо особое значение.
В любом случае я бы определенно поместил это в список для рендеринга.это в HTML.Это даст вам гораздо больше возможностей для его стилизации, позже.
Обновление
хочу использовать вариант 1. Но как мне поставить каждый параметр надругая строка с использованием <br>
Эта строка будет помещать <br>
между каждым элементом массива:
echo implode('<br>',array_merge(...$items));
Выход
1.<br>COTV_LITE(1800)<br>2.<br>COTV_PREMIUM(2200)
Единственныйспособ легко исправить это (сохраняя array_merge ) с помощью preg_replace , который является вторым.Поэтому я назову это:
Опция 1.2
$items = [["1.","COTV_LITE(1800)"],["2.","COTV_PREMIUM(2200)"]];
echo implode(preg_replace('/^(\w+\(\d+\))$/',' \1<br>',array_merge(...$items)));
Выход
1. COTV_LITE(1800)<br>2. COTV_PREMIUM(2200)<br>
Песочница
По сути, нет способа определить, где находится конечный элемент после их объединения.Эта операция эффективно выравнивает массив и дает нам что-то вроде этого:
["1.","COTV_LITE(1800)","2.","COTV_PREMIUM(2200)"]
Так что Regex делает это 'COTV_PREMIUM(2200)'
становится ' COTV_PREMIUM(2200)<br>'
.Это просто способ изменить это без необходимости погружаться в массив с некоторой логикой или чем-то еще.Мы получаем следующую модификацию массива:
["1."," COTV_LITE(1800)<br>","2."," COTV_PREMIUM(2200)<br>"]
Затем, с помощью implode , мы просто сплющиваем его снова в строку:
"1. COTV_LITE(1800)<br>2. COTV_PREMIUM(2200)<br>"
Regex ^(\w+\(\d+\))$
^
- соответствие начала строки (...)
- группа захвата 1 \w+
- соответствие любому рабочему символу a-zA-Z0-9_
один илибольше, напримерCOTV_PREMIUM
\(
- соответствует буквально (
\d+
- соответствует цифрам 0-9
одна или несколько, например 2200
\)
- соответствует )
буквально
$
- соответствует концу строки
Таким образом, это соответствует шаблону вторых (или даже) элементовв массиве мы заменим это следующим:
Замена ' \1<br>'
{space}
- добавляет начальный пробел \1
-значение группы захвата 1 (сверху) <br>
- добавить разрыв строки
Надеюсь, что имеет смысл.Это должно работать до тех пор, пока они соответствуют этому шаблону.Очевидно, что мы можем настроить шаблон, но при таком небольшом размере выборки мне трудно знать, какие будут изменения.
Например, будет работать что-то простое, например (.+\))$
TestIt ,Этот просто ищет окончание )
.Нам просто нужно что-то, чтобы захватить все четные, не совпадая с нечетными.Регулярные выражения могут очень запутать первые несколько раз, когда вы их видите, но они очень мощные.
PS - я добавил несколько ссылок на имена функций, они идут в документации PHPстраница для них.
Ура!