我的第一個問題的解決方案將是最初定義$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);
'implode'返回字符串;它將數組轉換爲字符串。所以,如果你把這個字符串放在一個新的數組中,就像你一樣,你最終會得到一個包含一個元素的數組。 – Utkanos 2014-10-20 21:09:19
如果你想統計有多少「等級」,那麼當你仍然是一個數組時,把你的計數移到implode和count($ rank_ids)之上。你也可以使用substr_count來計算字符串中存在多少'','並且加1。編輯:我想因爲你將字符串分配給一個新的變量,所以你可以'count($ rank_ids)'而不用將它移動到崩潰。 – 2014-10-20 21:13:34