我有一小段代码:
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] =>
)
)
)
)
答案 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
数组是什么样的,所以我随机编了一个。
上面的例子正如预期的那样完美无瑕。
唯一的另一个建议是(如评论中所述)打开错误报告。
ini_set('display_errors', 1);
error_reporting(E_ALL);
另外,如上所述,我们不知道$tokens
的样子。能否请您提供一个例子,因为这可能是您的问题。 (计数为1 @DrSpy Stated)