本記事の趣旨
PHPの配列について、備忘のためメモします。
誰かの何かの役に立てれば幸いです。
要件
配列A(以下”見本”)の要素の並び順を正として、配列B(以下”要並び替え”)の要素を並び替える。
ただし、
要並び替え配列の中身そのものを並び替えるのではなく、
要並び替え配列の各要素が見本配列に存在するか、をチェックしたうえで、
存在していたら、その要素は見本配列内では何番目にあるのか、という情報を取得し、
その情報をもとに、別な配列に要素を入れ直す。
単純な配列の場合
$mihon = ["りんご", "みかん", ”バナナ”]; // 見本
$temoto = ["バナナ”, "りんご", "みかん"]; // 要並び替え
$checked_array = []; // 並び替え後に格納する用の配列
foreach($mihon as $key => $fruit){
// 見本配列をループしつつ、要並び替え配列の$key番目の要素が、見本配列内に存在するかチェック
if(in_array($temoto[$key], $mihon)){
$index = array_search($fruit, $mihon); // 見本配列の要素の添字情報を変数に代入
$checked_array[$index] = $fruit; // 並び替え(というか別な配列に詰め直し)
}
}
var_dump($checked_array); // 見本配列と同じ順番になっている
// array(3) {
[0]=>
string(9) "りんご"
[1]=>
string(9) "みかん"
[2]=>
string(9) "バナナ"
}
「foreachでは$key => $valueはワンセット」というのを強く意識しないと混乱します。
もっと良いやり方があるような気もしますが、現状思いつきません。
多次元配列の場合
追って記載