2010-03-30 98 views
1

我是(完整的)PHP noob,需要一些帮助。关于数组的PHP问题

我工作的一个项目,借此用户可以经由形式(我使用ExpressionEngine)选择多达6级的类别。输出是这样的:

"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

如果你有一个包含6个项目,其中包括3个空字符串数组:

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

您可以implode那些为一个字符串,是这样的:

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

,你会得到下面的输出:

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


基本上,implode允许你把数组的所有项目都放到一个字符串,使用分离器 - 在这里,分隔符是","这就是您可以将字符串之间。

而且,因为implode只是在元素之间放置分隔符,所以我们必须在结果字符串的开始和结尾放置一个额外的"


(希望我明白你的意思......

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,CAT2,CAT3 或 CAT1,CAT2,CAT3,CAT4,CAT5 在我需要的输出比6个项目没有更多的这两种情况下。 – Martin 2010-03-30 05:10:18

+0

@Martin:我已经编辑了一些附加信息,例如:-) – 2010-03-30 05:31:08

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

作品甚至当$org6或更少的猫:

如果$org = "Cat1","Cat2","Cat3","cat4","cat5"

$str"Cat1","Cat2","Cat3","cat4","cat5",""

+0

@codaaddict非常感谢。这是最接近工作的东西。但是,如果我的初始结果大于4类,我根本得不到结果。 – Martin 2010-03-30 06:24:40

+0

@Martin:适合我......我更新了我的答案。 – codaddict 2010-03-30 06:33:33

+0

只有不到6个。但是6它不。 – Martin 2010-03-30 06:47:06