关于数组的php问题

时间:2010-03-30 04:40:53

标签: php

我是一个(完整的)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","","",""

这有意义吗?

由于 马丁

2 个答案:

答案 0 :(得分:6)

如果您的数组包含6个项目,包括3个空字符串:

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

你可以implode将这些变为字符串,这样:

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

您将获得以下输出:

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


基本上,implode允许您使用分隔符将数组的所有项目放入字符串中 - 此处,分隔符为",",这是您在字符串之间的内容。

而且,由于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)

而且,是的,您可以使用+ operator with arrays (引用)

  

+运算符附加元素   剩下的钥匙来自右手   数组左手,而   重复的密钥不会被覆盖。


如果您的$arr可能超过6个元素,则可以使用array_slice删除不需要的元素:

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

答案 1 :(得分: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",""