我理解上半场,但是我在下半场挣扎。特别是“(key($ a)!== $ i)”这一行是我停止理解的地方。这就是说,如果数组$ a的键不等于索引计数器$ i,那么布尔值vairable $ isList被赋值为false,但我不明白这个语句的重要性。 key($ a)!== $我告诉我们关于数组$ a的有用信息?该声明之后的界限也让我无法理解。请向我解释一下?谢谢
function getJsCode($a) {
if (is_null($a)) return 'null';
if ($a === false) return 'false';
if ($a === true) return 'true';
if (is_scalar($a)) {
$a = addslashes($a);
$a = str_replace("\n", '\n', $a);
$a = str_replace("\r", '\r', $a);
return "'".$a."'";
}
$isList = true;
for ($i=0, reset($a); $i<count($a); $i++, next($a))
if (key($a) !== $i) { $isList = false; break; }
$result = array();
if ($isList) {
foreach ($a as $v) $result[] = getJsCode($v);
return '[ ' . join(',', $result) . ' ]';
} else {
foreach ($a as $k=>$v) $result[] = getJsCode($k) . ': ' . getJsCode($v);
foreach ($a as $k=>$v) $result[] = $k . ': ' . getJsCode($v);
return '{ ' . join(', ', $result) . ' }';
}
}
答案 0 :(得分:2)
for ($i=0, reset($a); $i<count($a); $i++, next($a))
if (key($a) !== $i) { $isList = false; break; }
==如果它是一个数组,带有完整的数字键,按照从0到数的顺序,那么我们就可以像对待数组那样对它进行json_encode编码(不是PHP数组会介意你,实际上是哈希映射),否则就是宾语。就个人而言,我已将其写成:
$isList = array_keys($a) === range(0,count($a)-1);
插图:
array('foo', 'bar'); //succeeds
array('idx' => 'foo', 'bar'); //fails: key is string
array('0' => 'foo', 'bar'); //fails: key is string
array(1=> 'foo',0 => 'bar'); //fails: keys in wrong order