Поиск многомерного массива и возврат родительского ключа

У меня есть многомерный массив $games_array это выглядит так:

<?php

$games_array = array(
"game-one" => array(
"name" => "Game One",
"download_id" => "gameone",
"file" => "./games/files/Game One.zip"),
"game-two" => array(
"name" => "Game Two",
"download_id" => "gametwo",
"file" => "./games/files/Game Two.zip")
);

?>

Например, чтобы получить доступ к названию первой игры, я бы использовал $games_array["game-one"]["name"] который отлично работает

Хорошо, теперь к проблеме: у меня есть значение, например gameone, что соответствует download_id (что является ключом, который каждая игра в $games_array есть).

Теперь я хочу узнать ключ, в этом примере game-one или же game-twoмассива, который содержит это значение для ключа download_id, Это работает.

То, что я делаю в приведенном ниже коде, повторяется $games_array и найдите в каждой игре значение (в приведенном ниже коде gameone). Если он найден, возвращается ключ для этого значения.

Следующее, что я делаю (if ($key_found) { ...) попытаться выяснить ключ fileс помощью массива, в котором было найдено значение, которое я искал изначально, и сохраните его в $file,

к несчастью $file всегда пусто, и я не знаю почему.

<?php

$key = "";
$key_found = false;
$search_for_value = "gameone"; // search for game's download id in array
$file = "";

foreach($games_array as $game_id => $game_data) {
$key = array_search($search_for_value, $game_data);
echo "Searching for value <b>" . $search_for_value . "</b> in sub-array <b>" . $game_id . "</b>...<br />";
if ($key === FALSE) {
echo "Search returned FALSE<br /><br />";
} else if ($key === NULL) {
echo "Search returned NULL<br /><br />";
} else {
echo "\$key <b>" . $key . "</b> found! <br /><br />";
$key_found = true;
}
if ($key_found) {
// Key "download_id" found. Now search the parent array for the found key and use the
// returned result as the new key to access the "file" value in the found game's id in $games_array
$file = $games_array[array_search($key, $game_id)]["file"];
echo "The key <b>" . $key . "</b> was found.<br/>";
echo "\$file = " . $file . "<br />";
echo "Exiting loop.<br /><br />";
break;
}
}

$file = $games_array[$games_data]["file"];
echo "Checking if the file \"" . $file . "\" exists...<br />";
echo (file_exists($file) ? "File \"" . $file . "\" exists." : "File \"" . $file . "\" does not exist.");

?>

Я надеюсь, что вы понимаете мою проблему и можете мне помочь. Я был бы очень признателен … Я действительно застрял здесь.

1

Решение

Если вы уже знаете, что будете искать в download_id, вы делаете этот код гораздо более сложным, чем нужно. Я не уверен, есть ли реальный ответ на ваш вопрос, кроме как попробовать совершенно другой подход.

Вместо использования всех этих вызовов array_search, вы можете напрямую проверить значение столбца, который вы ищете, например, так:

  foreach( $games_array as $game_id => $game_data ) {
if( $game_data["download_id"] == $search_for_value ) {
$file = $game_data["file"];
break;
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]