有人可以向我解释这段PHP代码

时间:2010-09-15 10:13:17

标签: php

我理解上半场,但是我在下半场挣扎。特别是“(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) . ' }';
}
}

1 个答案:

答案 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