PHP:打印并取消设置数组

时间:2014-03-20 18:00:48

标签: php arrays unset

这是我的代码:

    $pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pizza2 = explode(" ",$pizza);

//echo count($pizza2);

for($i = 0; $i<count($pizza2); $i++)
{//echo "<b>$i</b>";

    echo "Array #".$i." is: <b>".$pizza2[$i]. "</b> ";
    unset($pizza2[$i]);
    }

但是我得到的输出只有第三部分......为什么会这样?我想要输出到第6页

6 个答案:

答案 0 :(得分:2)

这是因为您在for循环中执行count($pizza2)并且一旦取消设置该值,其长度也会在每个循环中减少。

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pizza2 = explode(" ",$pizza);
//echo count($pizza2);
$len = count($pizza2);
for($i = 0; $i<$len; $i++)
{//echo "<b>$i</b>";

    echo "Array #".$i." is: <b>".$pizza2[$i]. "</b> ";
    unset($pizza2[$i]);
}

答案 1 :(得分:1)

使用php foreach控制结构,这是一种迭代数组的简单方法,

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pizza2 = explode(" ",$pizza);
foreach($pizza2 as $key=>$piece){
    echo "Array #".$key." is: <b>".$piece. "</b> ";
    unset($pizza2[$key]);
}

答案 2 :(得分:1)

这段代码为您提供所需的输出,只需修改一行

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pizza2 = explode(" ",$pizza);

//echo count($pizza2);
$Count = count($pizza2);
for($i = 0; $i<$Count; $i++)
{//echo "<b>$i</b>";

    echo "Array #".$i." is: <b>".$pizza2[$i]. "</b> ";
    unset($pizza2[$i]);
}

答案 3 :(得分:1)

这是一个合乎逻辑的问题。

这一行:

 unset($pizza2[$i]);
每次使用unset时,

都会减少数组的长度。 所以在第四次迭代中它有数组计数== 3和$ i == 3,所以它从循环中退出。

在取消设置数组之前,需要将计数转换为变量,然后在循环中使用该变量。

像这样:

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pizza2 = explode(" ",$pizza);
print_r($pizza2 );
$len = count($pizza2);

for($i = 0; $i<$len; $i++)
{
//echo "<b>$i</b>";

    echo "Array #".$i." is: <b>".$pizza2[$i]. "</b> ";
    unset($pizza2[$i]);
    }

答案 4 :(得分:1)

循环停止的原因是每次循环运行时数组$ pizza2的count()都会改变。因此,for语句的条件在每个循环中都会发生变化,当它达到3时,您的数组现在更短,因此满足条件并且循环停止。 当$ i达到3时,数组已经缩短为只有三个元素。这将证明正在发生的事情:

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pizza2 = explode(" ",$pizza);

for($i = 0; $i<count($pizza2); $i++)
{
    echo "Array #".$i." is: <b>".$pizza2[$i]. "</b> ";
    unset($pizza2[$i]);
    echo "pizza2 has ".count($pizza2)." elements";
}

要解决此问题,您可以获取数组的初始长度并存储它:

$length = count($pizza2);
for($i = 0; $i<$length; $i++)
{//etc... as before

您还可以使用foreach()进行简化:

foreach ($pizza2 as $key => $value){
    echo "Array #" . $key . " is: " . $value ."<br/>";
}

答案 5 :(得分:1)

您需要将count($pizza2)放入某个变量,例如:$count。它会保留数据的原始大小,因为unset($pizza2[$i])会缩小$pizza2的大小。