2010-03-30 19 views
1

Я (полный) php noob и немного нуждаюсь в чем-то.php вопрос относительно массивов

Я работаю над проектом, посредством которого пользователь может выбрать до 6 категорий через форму (я использую ExpressionEngine). Выходной сигнал выглядит следующим образом:

"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","","","" 

ли это смысл?

Благодаря Martin

ответ

6

Если у вас есть массив, который содержит 6 пунктов, в том числе 3 пустых строк:

$arr = array('cat1', 'cat2', 'cat3', '', '', ''); 

Вы можете implode те, в строку, таким образом:

echo '"' . implode('","', $arr) . '"'; 

И вы получите следующий результат:

"cat1","cat2","cat3","","","" 


В принципе, implode позволяет поместить все элементы массива в строку, используя разделитель - здесь, сепаратор "," который является то, что вы можете между вашими строками.

И, поскольку в результате взлома только разделитель разделится между элементами, мы должны добавить дополнительный номер " в начале и в конце результирующей строки.


(Надеюсь, я понял, что вы имели в виду ...)



EDIT после комментария:

OK, если $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) 

И, да, вы можете использовать + operator with arrays(цитирую):

оператор + добавляет элементы оставшиеся ключи от правой руки массив слева, тогда как дублированные ключи НЕ перезаписываются.


Если $arr может быть больше, чем 6 элементов, вы можете использовать array_slice, чтобы удалить не-требуемые элементы:

$arr = array('cat1', 'cat2', 'cat3', '', '', '', ''); 
$arr = array_slice($arr, 0, 6); 
echo '"' . implode('","', $arr) . '"'; 
+0

Привет Паскаль, Спасибо за ваш ответ. Сначала я не получу пустые строки. я мог бы получить: cat1, КАТ2, cat3 или cat1, cat2, cat3, cat4, cat5 В любом случае, мне нужно на выходе быть не более чем на 6 пунктов. – Martin

+0

@ Мартин: Я отредактировал свой ответ с несколькими дополнительными сведениями и примером :-) –

1

Вы можете попробовать:

$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",""

+0

@codaaddict Большое спасибо за это. Это самое близкое к чему-то, что работает. Однако, если мои первоначальные результаты превышают 4 категории, я не получаю никаких результатов. – Martin

+0

@ Мартин: работает для меня .. Я обновил свои анны. – codaddict

+0

С менее чем 6. Но с 6 это не так. – Martin

Смежные вопросы