array_shift导致php无声崩溃

时间:2014-12-09 23:16:43

标签: php

我有一小段代码:

echo '<br>T COUNT '.count($tokens);

echo '<br>ARRAY COUNT '.count($tokens);
while (count($tokens)) {
  echo '<br>I GET HERE';
  echo '<pre>'.print_r($tokens,true).'</pre>';
  $token = array_shift($tokens);
  echo '<br>BUT NOT HERE '.$token;
  ...
}

导致PHP无声崩溃,它让我完全陷入困境。在下面的输出中,您可以看到它通过print_r执行,但是在array_shift之后没有到达echo语句,您还可以看到$ tokens变量print_r&#39; s作为&#39;数组& #39; (以及一个小阵列 - 应该是非常易于管理的)。我甚至尝试在array_shift周围放一个try / catch并在catch中放入一个调试输出,但没有打印出来。

ARRAY COUNT 1

I GET HERE

Array (
    [0] => SassScriptFunction Object
        (
            [name:SassScriptFunction:private] => rgb
            [args:SassScriptFunction:private] => Array
                (
                    [0] => SassNumber Object
                        (
                            [numeratorUnits:SassNumber:private] => Array
                                (
                                )

                            [denominatorUnits:SassNumber:private] => Array
                                (
                                )

                            [inExpression] => 1
                            [value] => 0
                            [units] => 
                        )

                    [1] => SassNumber Object
                        (
                            [numeratorUnits:SassNumber:private] => Array
                                (
                                )

                            [denominatorUnits:SassNumber:private] => Array
                                (
                                )

                            [inExpression] => 1
                            [value] => 0
                            [units] => 
                        )

                    [2] => SassNumber Object
                        (
                            [numeratorUnits:SassNumber:private] => Array
                                (
                                )

                            [denominatorUnits:SassNumber:private] => Array
                                (
                                )

                            [inExpression] => 1
                            [value] => 0
                            [units] => 
                        )

                )

        )

)

2 个答案:

答案 0 :(得分:4)

我很确定array_shift不是问题。

echo '<br>BUT NOT HERE '.$token;

是,因为你将对象用作字符串。

尝试使用

echo '<br>BUT NOT HERE '.print_r($token,true);

答案 1 :(得分:2)

由于array_shift()可以通过引用处理数组,因此您可以轻松尝试这样的事情:

$tokens = [
    '32h',
    '235hg',
    'sdfdsdngdfngdf',
    'sfngfsnn',
    'sfngsfn',
    'sfnsgfnnfsnbsfgn',
    'fsnfgsng',
    'sfgnsfgn'
];

$count = count($tokens);

for ($i = 0; $i < $count; $i++) {
    echo '<br>I GET HERE';
    echo '<pre>' . print_r($tokens, true) . '</pre>';
    array_shift($tokens);
}

我不知道你的$tokens数组是什么样的,所以我随机编了一个。

上面的例子正如预期的那样完美无瑕。

Example

唯一的另一个建议是(如评论中所述)打开错误报告。

ini_set('display_errors', 1);
error_reporting(E_ALL);

另外,如上所述,我们不知道$tokens的样子。能否请您提供一个例子,因为这可能是您的问题。 (计数为1 @DrSpy Stated