PHP-计算一个内爆数组


PHP - counting an imploded array

我试图使用sizeofcount来返回数组中的事物数量,但是每当我使用$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的数组,包含多个元素,即12
  • 名为$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()函数相关的部分。