2010-03-30 102 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