Как назначить имена ключам при создании ассоциативного массива PHP с foreach? - PullRequest
1 голос
/ 15 сентября 2011

Допустим, у меня есть ассоциативный массив, в котором перечислены животные в зоопарке и некоторые их функции, например:

$zoo => array(
  "grizzly" => array(
    "type"      => "Bear",
    "legs"      => 4,
    "teeth"     => "sharp",
    "dangerous" => "yes"
  ),
  "flamingo" => array(
    "type"      => "Bird",
    "legs"      => 2,
    "teeth"     => "none",
    "dangerous" => "no"
  ),
  "baboon" => array(
    "type"      => "Monkey",
    "legs"      => 2,
    "teeth"     => "sharp",
    "dangerous" => "yes"
  )
);

Затем я создаю список этих животных, например:

$animal_types = array;
foreach($zoo as $animal) {
  $animal_types[] = $animal["type"];
}

Какие выходные данные:

Array(
  [0] => "Bear",
  [1] => "Bird",
  [2] => "Monkey",
)

Я бы хотел, чтобы последний массив был ассоциативным, например:

Array(
  ['grizzly']  => "Bear",
  ['flamingo'] => "Bird",
  ['baboon']   => "Monkey",
)

Как создать ассоциативный массив, извлекая данные из другого массива, используяforeach

Ответы [ 4 ]

3 голосов
/ 15 сентября 2011

Вы имеете в виду:

foreach($zoo as $animal_name => $animal) {
    $animal_types[$animal_name] = $animal["type"];
}
2 голосов
/ 15 сентября 2011

Вам просто нужно определить ключ в цикле foreach, а затем использовать ключ текущего элемента первого массива, чтобы указать ключ вставки во втором массиве.Что-то вроде:

$animal_types = array();
foreach($zoo as $key=>$animal) {
   $animal_types[$key] = $animal["type"];
}
1 голос
/ 15 сентября 2011
$animal_types = array();
foreach($zoo as $aName=>$animal) {
  $animal_types[$aName] = $animal["type"];
}
0 голосов
/ 15 сентября 2011

Поскольку у вас уже есть ключи, вам нужно только изменить значения.Поэтому скопируйте в зоопарк и измените каждое значение:

$animal_types = $zoo;
foreach($animal_types as &$animal) {
  $animal = $animal["type"];
}
unset($animal);

Или, возможно, проще понять с помощью замыкания:

$animal_types = array_map(function($v){return $v["type"];}, $zoo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...