Я пытаюсь написать «умную» функцию поиска массива, которая будет помнить последний найденный элемент.
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 ) ]
Тем не менее, я хотел бы перейти по ссылке, потому что найденный массив должен быть впоследствии изменен. Кто-то сталкивался с этой проблемой раньше и мог советовать, как он ее решил?