php – 即使需要创建密钥,如何正确增加某些数组键?
假设您需要创建某种类型的“顶部”并具有如下代码:
$matches=array(); foreach ($array as $v){ $matches[processing($v)]++; } 这将为索引需要创建的案例输出Notice:Undefined index. 既然你知道你必须创建索引,那么解决这些案例的最佳方法是什么? 我根据具体情况使用了这些解决方案 >抑制错误@ $匹配[$v]; 还有其他方法吗? 编辑: 在一个简单的例子中你有$match [$v];你也可以使用array_count_values()(正如Yoshi建议的那样) 解决方法
经过一些阅读,写作和测试,我得到了一些东西:
function inc(&$var){ if (isset($var)) $var++;else $var=1; } 我以为我打了金,但让我们先看看测试…… 测试代码: $a=array(); // Pre-Fill array code goes here for($i=1;$i<100000;$i++) { $r=rand(1,30000); //increment code goes here } // Remove extra keys from array with: //foreach ($a as $k=>$v) if ($v==0) unset($a[$k]); 执行时间:(仅供参考) inc($a[$r]) 1.15-1.24 @$a[$r]++ 1.03-1.09 $a[$r]=array_key_exists($r,$a)?$a[$r]++:1; 0.99-1.04 $a[$r]=!empty($a[$r])?$a[$r]++:1; 0.61-0.74 if (!empty($a[$r])) $a[$r]++;else $a[$r]=1; 0.59-0.67 $a[$r]=isset($a[$r])?$a[$r]++:1; 0.57-0.65 if (isset($a[$r])) $a[$r]++;else $a[$r]=1; 0.56-0.64 //with pre-fill $a=array_fill(0,30000,0); +0.07(avg) for($i=1;$i<=30000;$a[$i++]=0); -0.04(avg) //with pre-fill and unset $a=array_fill(0,45000,0); +0.16(avg) for($i=1;$i<=45000;$a[$i++]=0); +0.02(avg) 结论: > @当然是输入速度最快的,在这种情况下我没有看到使用它的任何问题,但也可以随意检查这个问题:Suppress error with @ operator in PHP RFC 我不认为这个答案100%完成,但是,现在它看起来像isset()是最快的和@最懒的.任何意见和想法表示赞赏! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |