目前我在使用array_replace时使用foreach来搜索密钥:
$grades = array(
0 =>array('id'=>1, 'grade'=>4),
1 =>array('id'=>5, 'grade'=>2),
2 =>array('id'=>17,'grade'=>1),
)
$replacement = array('id'=>17,'grade'=>3);
foreach($grades as $key=>$grade){
if($grade->id ==$replacement['id'] )
$found = $key;
}
$new_grades = array_replace($grades, array($found_key=>$replacement));
我想知道当$ grades数组中元素的数量增长时,这是否会变得效率低下。有没有更好的方法来搜索和替换工作?
答案 0 :(得分:5)
执行时间随着数组中元素的数量(O(N)
)线性增长。使用更好的数据结构,即以关联方式使用数组,并将ID作为索引:
$grades = array(
1 => array('grade'=>4),
5 => array('grade'=>2),
17 => array('grade'=>1)
);
然后是l ookup cost is constant (O(1)
)。你可以这样做:
$grades[$replacement['id']] = array('grade' => $replacement['grade']);
或类似的东西,具体取决于您的数据。
答案 1 :(得分:4)
是的,这可以更有效地完成。
$grades = array(
1 => 4,
5 => 2,
17 => 1,
);
$replacement = array(
17 => 3,
);
$grades = array_merge($grades, $replacement);
如果您需要与ID相关的更多信息而不仅仅是等级,那么您仍然需要像Felix Kling那样更复杂的数据结构。但是你的问题中没有这样的要求,所以我没有假设它。