2014-10-20 20 views
0

我想使用sizeofcount返回數組內的事物的數量,但是每當我使用$rank_ids2來算,而不是手動輸入1, 2, 3, 4, 67, 7的內爆陣列,它只是返回1,但是當我直接在數組中鍵入它們,就可以算得上6!PHP - 計數

$ranksAllowed = '|1|2|3|4|67|7|'; 

$rank_ids = explode('|', trim("|".$ranksAllowed."|", '|')); 
$rank_ids2 = implode(", ", $rank_ids); 

$arrayofallowed = array($rank_ids2); 
echo sizeof($arrayofallowed); 

$rank_ids剛剛開啓| 1 | 2 | ..格式轉換成1,2

+4

'implode'返回字符串;它將數組轉換爲字符串。所以,如果你把這個字符串放在一個新的數組中,就像你一樣,你最終會得到一個包含一個元素的數組。 – Utkanos 2014-10-20 21:09:19

+1

如果你想統計有多少「等級」,那麼當你仍然是一個數組時,把你的計數移到implode和count($ rank_ids)之上。你也可以使用substr_count來計算字符串中存在多少'','並且加1。編輯:我想因爲你將字符串分配給一個新的變量,所以你可以'count($ rank_ids)'而不用將它移動到崩潰。 – 2014-10-20 21:13:34

回答

0

我的第一個問題的解決方案將是最初定義$ranksAllowed爲一個數組,而不是一個管道字符分隔字符串:

$ranksAllowed = array(1, 2, 3, 4, 67, 7); 

這將使更多的意義在幾乎任何可預見的情況。 如果出於某種原因,您寧願將$ranksAllowed保留爲字符串...

一些簡化

$rank_ids = explode('|', trim("|".$ranksAllowed."|", '|')); 

可以簡化爲:

$rank_ids = explode('|', trim($ranksAllowed, '|')); 

決定字符串或陣列格式

現在它看起來像你想同時做兩件事情(並且都不實現)

一種可能性是你想把你的管道-delimited(「| 1 | 2 | 3 | ...」)字符串轉換爲逗號分隔字符串(如「1,2,3,...」)。在這種情況下,你可以簡單地做一個字符串替換:

$commaDelimited = str_replace('|', ',', trim($ranksAllowed, '|')); 

另一種可能(我相信你要找的人)是產生所有允許的行列數組,你已經實現在前面的步驟,但分配給$rank_ids代替$arrayofallowed

$arrayofallowed = explode('|', trim($ranksAllowed, '|')); 

//Should print out data in array-format, like you want 
print_r($arrayofallowed); 

//Echo the length of the array, should be 6 
echo count($arrayofallowed); 
0

implode轉換數組爲字符串,所以一切後,你會得到這樣的:

  • 一字符串名爲$ranksAllowed,其中包含|1|2|3|4|67|7|
  • 一個名爲$rank_ids的數組包含多個元素,它們是1,2,等等...
  • 名爲$rank_ids2一個字符串,其中包含1,2,3,4,67,7
  • 命名爲$arrayofallowed只有1元,數組是這裏面$rank_ids2

字符串爲了實現這一目標包含1,2,3,4,67,7|1|2|3|4|67|7|一個字符串你可以像你一樣修剪|字符並用,替換|。較少的CPU昂貴。

$rank_ids2 = str_replace("|", ",", trim("|".$ranksAllowed."|", '|')); 

如果你想指望他們,你可以explode它和計數的元素:

$rank_ids2_array = explode(',', $rank_ids2); 
echo sizeof($rank_ids2_array); 

或與您的代碼,你可以簡單地計算已經爆炸$rank_ids

echo sizeof($rank_ids); 
0

嘗試類似如下:

$ranksAllowed = '|1|2|3|4|5|67|7|'; 
$rank_ids = explode('|', trim($ranksAllowed, '|')); 
echo count($rank_ids); 

只是爲了說明上述情況,$ arrayofallowed被爆$ rank_ids的陣列,創建一個字符串。計數時,這不會給您預期的結果。如果你簡單地計數$ rank_ids(因爲explode()會給你一個數組),你應該看到7個項目的期望結果。

$ rank_ids是你的數組,$ arrayofallowed是一個字符串。

有關更多信息,請參閱與implode()和explode()函數相關的PHP手冊部分。