1

目前我在使用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 数组中的元素数量增长过多时,这是否会变得低效。有没有更好的方法来进行搜索和替换工作?

4

2 回答 2

5

执行时间随着数组中元素的数量线性增长 ( O(N))。使用更好的数据结构,即以关联方式使用数组,以 ID 作为索引:

$grades = array(
    1 => array('grade'=>4),
    5 => array('grade'=>2), 
    17 => array('grade'=>1)
);

那么查找成本是常数 ( O(1))。你可以做:

$grades[$replacement['id']] = array('grade' => $replacement['grade']);

或类似的东西,具体取决于您的数据。

于 2012-08-16T14:59:06.410 回答
4

是的,这可以大大提高效率。

$grades = array(
    1   => 4,
    5   => 2,
    17  => 1,
);
$replacement = array(
    17  => 3,
);
$grades = array_merge($grades, $replacement);

如果您需要与 ID 相关的更多信息而不仅仅是成绩,那么您仍然需要像 Felix Kling 那样涉及更多的数据结构。但是您的问题中没有这样的要求,所以我不假设。

于 2012-08-16T14:59:06.427 回答