次の配列を検討してください。yesterday
これらは、およびの上位 5 名の従業員を表していtoday
ます。
$yesterday = array(
6 => array('name' => 'Tod', 'score' => 9.5),
12 => array('name' => 'Jim', 'score' => 7.3),
18 => array('name' => 'Bob', 'score' => 8.4),
7 => array('name' => 'Jan', 'score' => 6.2),
20 => array('name' => 'Sam', 'score' => 6.0),
);
$today = array(
6 => array('name' => 'Tod', 'score' => 9.1),
9 => array('name' => 'Jef', 'score' => 9.3),
35 => array('name' => 'Axl', 'score' => 7.6),
7 => array('name' => 'Jan', 'score' => 6.5),
41 => array('name' => 'Ted', 'score' => 8.0),
);
上記からコンパイルされた 3 つの新しい配列が必要です:昨日トップ5に入っていた従業員を保持し、$stay
今日もそうです。 -5 リスト:$gone
$new
$today
// notice that the scores in $stay come from $today, not $yesterday
// also notice that index keys are maintained
$stay = array(
6 => array('name' => 'Tod', 'score' => 9.1),
7 => array('name' => 'Jan', 'score' => 6.5)
);
$gone = array(
12 => array('name' => 'Jim', 'score' => 7.3),
18 => array('name' => 'Bob', 'score' => 8.4),
20 => array('name' => 'Sam', 'score' => 6.0)
);
$new = array(
9 => array('name' => 'Jef', 'score' => 9.3),
35 => array('name' => 'Axl', 'score' => 7.6),
41 => array('name' => 'Ted', 'score' => 8.0)
);
ここでロジックを構築する方法についての手がかりはありません。ループから始めましたが、遠くまで行きませんでした。私はそれがこのようなものであるべきだと信じています。これを正しく理解するのを手伝ってもらえますか?
for ($i = 0; $i < count($yesterday); $i++) {
// I'm comparing key numbers, but not key values
// how do I compare key values?
if (in_array($yesterday[$i], $today) {
// add to $stay array
}
else {
// add to $gone array
}
}
for ($i = 0; $i < count($today); $i++) {
if (!in_array($today[$i], $yesterday) {
// add to $new array
}
}
PSこれが役立つかどうかはわかりませんが、$yesterday
常に$today
同じ長さです(この場合は5アイテムですが、たとえば両方の配列が7または10アイテムを保持する他のシナリオが可能です)。と の結合されたアイテムは$stay
、論理的に常にまたは:-)$new
のアイテムの数に等しくなります。$yesterday
$today