我试图使用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
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);
我的第一个解决方案是最初将$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, '|'));
另一种可能性(我相信你正在寻找的可能性)是生成一个所有允许等级的数组,你已经在前面的步骤中完成了,但分配给了$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);
尝试以下操作:
$ranksAllowed = '|1|2|3|4|5|67|7|';
$rank_ids = explode('|', trim($ranksAllowed, '|'));
echo count($rank_ids);
为了解释以上内容,$arrayofilered正在内爆$rank_ids数组,从而创建一个字符串。计算时,这不会给您带来预期的结果。如果你只计算$rank_ids(因为explode()会给你留下一个数组),你应该会看到7项的期望结果。
$rank_ids是您的数组,$arrayoverled是一个字符串。
有关更多信息,请参阅PHP手册中与内爆()和explode()函数相关的部分。