我正在尝试使用sizeof
或count
来返回数组中的内容数量,但每当我使用$rank_ids2
来计算而不是输入1, 2, 3, 4, 67, 7
时手动,它只返回1
,但是当我直接在数组中输入它们时,它就算是6就好了!
$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
答案 0 :(得分:0)
implode
将数组转换为字符串,所以在得到所有内容之后:
$ranksAllowed
|1|2|3|4|67|7|
的字符串
$rank_ids
的数组,其中包含多个元素,分别为1
,2
等...... $rank_ids2
1,2,3,4,67,7
的字符串
$arrayofallowed
的数组,只有一个元素,就是$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);
答案 1 :(得分: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手册部分。
答案 2 :(得分:0)
我对你的问题的第一个解决方案是最初将$ranksAllowed
定义为数组而不是管道字符分隔的字符串:
$ranksAllowed = array(1, 2, 3, 4, 67, 7);
在几乎任何可预见的情况下,这都会更有意义。 如果出于某种原因,请将$ranksAllowed
保留为字符串......
$rank_ids = explode('|', trim("|".$ranksAllowed."|", '|'));
可以简化为:
$rank_ids = explode('|', trim($ranksAllowed, '|'));
现在,您似乎一次尝试做两件事(并没有实现)
一种可能性是你想把管道分隔(" | 1 | 2 | 3 | ...")字符串变成逗号分隔的字符串(比如" 1,2, 3,......")。在这种情况下,您可以简单地执行字符串替换:
$commaDelimited = str_replace('|', ',', trim($ranksAllowed, '|'));
另一种可能性(我相信你正在寻找的那种)是产生一个包含所有允许等级的数组,你已经在之前的步骤中完成了,但被分配给{{1而不是$rank_ids
:
$arrayofallowed