我有一小段代码:
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为"数组"(还有一个小数组 - 应该非常易于管理)。我什至尝试在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] =>
)
)
)
)
确定array_shift这不是问题。
线
echo '<br>BUT NOT HERE '.$token;
是,因为您使用对象作为字符串。
尝试使用
echo '<br>BUT NOT HERE '.print_r($token,true);
由于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
是什么样子的。您能否提供一个例子,因为这可能是您的问题。(如@DrSpy所述计数为 1)