最後に見つかった項目を記憶する「スマートな」配列検索関数を作成しようとしています。
function &GetShop(&$shops, $id) {
static $lastShop = null;
if ($lastShop == null) {
echo "lastShop is null <br/>";
} else {
echo "lastShop: [" . print_r($lastShop, true) . "]<br/>";
}
if ($lastShop != null && $lastShop['id'] == $id) {
return $lastShop;
}
for ($i = 0; $i < count($shops); $i++) {
if ($shops[$i]['id'] == $id) {
$lastShop = &$shops[$i];
return $shops[$i];
}
}
}
$shops = array(
array("id"=>"1", "name"=>"bakery"),
array("id"=>"2", "name"=>"flowers")
);
GetShop($shops, 1);
GetShop($shops, 1);
GetShop($shops, 2);
GetShop($shops, 2);
ただし、次の行の発行者がいるようです。
$lastShop = &$shops[$i];
この関数をそのまま実行すると、次の出力が得られます。
lastShop is null
lastShop is null
lastShop is null
lastShop is null
代わりに「&」を削除して値を渡すと、正常に機能します。
lastShop is null
lastShop: [Array ( [id] => 1 [name] => bakery ) ]
lastShop: [Array ( [id] => 1 [name] => bakery ) ]
lastShop: [Array ( [id] => 2 [name] => flowers ) ]
ただし、見つかった配列は後で変更する必要があるため、参照渡ししたいと思います。誰かが以前にこの問題に遭遇したことがあり、どのように解決したかアドバイスできますか?