Вопрос
Я (полный) PHP NOOB, и мне нужно что -то помочь.
Я работаю над проектом, в котором пользователь может выбрать до 6 категорий через форму (я использую ExpressEngine). Вывод такой:
"Cat1","Cat2","Cat3"
...и так далее. Пользователь может выбрать до 6 категорий в этой форме.
Что мне нужно: даже если мой результат - 3 категории, мне нужно иметь 6 «ячейки» - из -за отсутствия лучшего слова - даже если они пусты:
"Cat1","Cat2","Cat3","","",""
Я пробовал это:
<?php
$str = '(output goes here)';
print_r(explode(',', $str, 6));
?>
... но выход дает мне:
Array
(
[0] => Cat1
[1] => Cat2
[2] => Cat3
[3] =>
[4] =>
[5] =>
)
Как мне добраться от этого к этому:
"Cat1","Cat2","Cat3","","",""
Имеет ли это смысл?
Спасибо, Мартин
Нет правильного решения
Другие советы
Если у вас есть массив, который содержит 6 предметов, в том числе 3 пустых строк:
$arr = array('cat1', 'cat2', 'cat3', '', '', '');
Вы можете implode
они в строке, таким образом:
echo '"' . implode('","', $arr) . '"';
И вы получите следующий вывод:
"cat1","cat2","cat3","","",""
В принципе, implode
Позволяет вам помещать все элементы массива в строку, используя сепаратор - здесь сепаратор ","
Что вы можете между своими строками.
И, поскольку взорвать только разделитель между элементами, мы должны положить дополнение "
в начале и в конце полученной строки.
(Надеюсь, я понял, что ты имел в виду ...)
Изменить после комментария:
Хорошо, если ты $arr
Массив не содержит шесть элементов в начале:
$arr = array('cat1', 'cat2', 'cat3');
Возможность может состоять в создании массива с пустыми элементами; Как это, например:
$count = count($arr);
// Create an array with empty elements
$padding = array_fill($count, 6-$count, '');
var_dump($padding);
И тогда добавьте их в $arr
множество :
// Add the empty elements to $arr
$arr = $arr + $padding;
(Вы также можете использовать array_merge
, Я полагаю)
И теперь, вернемся к нашим implode
:
echo '"' . implode('","', $arr) . '"';
И на этот раз вы получите:
"cat1","cat2","cat3","","",""
Вот что var_dump($padding);
дает информацию:
array
3 => string '' (length=0)
4 => string '' (length=0)
5 => string '' (length=0)
И да, вы можете использовать +
оператор с массивами (цитируя) :
А
+
Оператор добавляет элементы оставшихся клавиш из правого массива в левую руку, тогда как дублированные клавиши не перезаписываются.
Если твой $arr
может быть длиннее 6 элементов, вы можете использовать array_slice
Чтобы удалить необычные элементы:
$arr = array('cat1', 'cat2', 'cat3', '', '', '', '');
$arr = array_slice($arr, 0, 6);
echo '"' . implode('","', $arr) . '"';
Можешь попробовать:
$org = '"Cat1","Cat2","Cat3"';
$arr = explode(',',$org);
$arr = array_merge($arr,array_fill(count($arr),6-count($arr),'""'));
$str = implode(',',$arr);
echo($str); // prints "Cat1","Cat2","Cat3","","",""
Работает даже когда $org
имеет 6
или меньше кошек:
Если $org = "Cat1","Cat2","Cat3","cat4","cat5"
$str
будет "Cat1","Cat2","Cat3","cat4","cat5",""