2010-09-15 118 views
1

我明白上半场,但我正在与下半场挣扎。特别是“(key($ a)!== $ i)”这一行是我停止理解的地方。这是说,如果数组$ a的键不等于索引计数器$ i,那么布尔可用的$ isList被赋值为false,但我不明白这个语句的意义。密钥($ a)!== $我有用地告诉我们数组$ a?该声明之后的句子也没有提到我。请向我解释一下?谢谢有人可以向我解释这段php代码

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) . ' }'; 
} 
} 
+14

这是*可怕,可怕的*代码。 – 2010-09-15 10:15:41

+0

为什么你需要熟悉这个?继承项目,学习..? – 2010-09-15 10:17:08

+0

@皮卡:标记为“作业”; @David:尽可能快地运行。 – halfdan 2010-09-15 10:19:17

回答

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 
相关问题