PHP - 计算内爆数组

时间:2014-10-20 21:06:57

标签: php arrays explode implode

我正在尝试使用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

3 个答案:

答案 0 :(得分:0)

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);

答案 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