PHP - как получить конкретное значение многомерного массива

Я новичок в PHP, поэтому в основном у меня есть массив без указанного ключа и только значения, которые являются массивами. Я хочу узнать имена людей, которые собираются на весенние каникулы (== правда). Я пробовал это, но не работает ...

$liste = [
  ['name' => 'Elsa', 'job' => 'Student', 'springbreak' => 'true' ],
  ['name' => 'Chris', 'job' => 'Teacher', 'springbreak' => 'true' ],
  ['name' => 'Zob', 'job' => 'Student', 'springbreak' => 'false' ],
  ['name' => 'Ken', 'job' => 'Teacher', 'springbreak' => 'true' ],
  ['name' => 'Ryan', 'job' => 'Student', 'springbreak' => 'false' ],
  ['name' => 'Tenta', 'job' => 'Teacher', 'springbreak' => 'true' ]

];

  foreach($liste as $line){
        foreach($line as $value){
          if ($value['springbreak'] == true)
               echo $value['name'];
        }
  }

вывод должен быть: Эльза, Крис, Кен, Тента

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
38
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать array_filter, array_map и join:

<?php
$liste = [
  ['name' => 'Elsa', 'job' => 'Student', 'springbreak' => 'true'],
  ['name' => 'Chris', 'job' => 'Teacher', 'springbreak' => 'true'],
  ['name' => 'Zob', 'job' => 'Student', 'springbreak' => 'false'],
  ['name' => 'Ken', 'job' => 'Teacher', 'springbreak' => 'true'],
  ['name' => 'Ryan', 'job' => 'Student', 'springbreak' => 'false'],
  ['name' => 'Tenta', 'job' => 'Teacher', 'springbreak' => 'true']
];

// Filter to only keep values with springbreak to true
$springbreak_only = array_filter($liste, function($entry) { return $entry['springbreak'] === 'true'; });

// Grab the names (and ditch the rest)
$springbreak_names = array_map(function($entry) { return $entry['name']; }, $springbreak_only);

// Output the comma-separated names
echo join(', ', $springbreak_names);

Интернет-фрагмент

Альтернатива с array_reduce (будет только один цикл):

$springbreak_names = array_reduce($liste, function($springbreak_names, $entry) {
  if ($entry['springbreak'] === 'true')
    $springbreak_names[] = $entry['name'];
  return $springbreak_names;
}, []);

echo join(', ', $springbreak_names);

См. Ответ @ don't angry me для другого простого решения, менее функционального, но и более простого.

Примечание: вам, вероятно, следует использовать логическое значение true вместо 'true' (строка), когда вы можете.

Способ array_reduce () мне кажется перспективным :)

Always Sunny 09.10.2018 03:15
Ответ принят как подходящий

Почему ваш существующий код не работает?

Потому что вы использовали ненужный дваforeach(), тогда как Одинforeach() сделает свое дело. Другая причина в том, что вы сравниваете вот так $line['springbreak'] == true, который должен быть $line['springbreak'] == 'true'.

Итак, с вашим существующим кодом. Давай попробуем,

foreach($liste as $line){
    if ($line['springbreak'] == 'true')
        echo $line['name'];
}

Почему не простоforeach()петля иimplode()чтобы присоединиться к имени, где весенние каникулы - это true?

<?php
$liste = [
    ['name' => 'Elsa', 'job' => 'Student', 'springbreak' => 'true' ],
    ['name' => 'Chris', 'job' => 'Teacher', 'springbreak' => 'true' ],
    ['name' => 'Zob', 'job' => 'Student', 'springbreak' => 'false' ],
    ['name' => 'Ken', 'job' => 'Teacher', 'springbreak' => 'true' ],
    ['name' => 'Ryan', 'job' => 'Student', 'springbreak' => 'false' ],
    ['name' => 'Tenta', 'job' => 'Teacher', 'springbreak' => 'true' ]
];
$names = [];
foreach($liste as $list){
    if ($list['springbreak']=='true'){
        $names[] = $list['name'];
    }
}
echo implode(',',$names);
?>

Выход:

Elsa,Chris,Ken,Tenta

ДЕМО:https://3v4l.org/B7Bo6

Вы забыли, если заявление.

foreach($liste as $line){
    foreach($line as $value){
        if ($value['springbreak'] === 'true'){
            echo $value['name'];
        }
    }
}

Я пришел к следующему решению:

<?php

    $liste = [
        ['name' => 'Elsa', 'job' => 'Student', 'springbreak' => 'true' ],
        ['name' => 'Chris', 'job' => 'Teacher', 'springbreak' => 'true' ],
        ['name' => 'Zob', 'job' => 'Student', 'springbreak' => 'false' ],
        ['name' => 'Ken', 'job' => 'Teacher', 'springbreak' => 'true' ],
        ['name' => 'Ryan', 'job' => 'Student', 'springbreak' => 'false' ],
        ['name' => 'Tenta', 'job' => 'Teacher', 'springbreak' => 'true' ]

    ];


    $going_to_springbreak = array();

    //Check every item
    foreach($liste as $line){
        //Check first if the 'springbreak' is true
        if ($line['springbreak'] == 'true'){
            //Then add the name of that item to the new array
            $going_to_springbreak[] = $line['name'];

            //OR you can add the entire item to the new array if you want to use the other values
            //$going_to_springbreak[] = $line;
        }
    }

    var_dump($going_to_springbreak)

?>

Выход:

array(4) {
      [0]=>
      string(4) "Elsa"
      [1]=>
      string(5) "Chris"
      [2]=>
      string(3) "Ken"
      [3]=>
      string(5) "Tenta"
    } 

В заключение я настоятельно рекомендую сохранить значение «истина» или «ложь» как примитивное значение, поэтому:

'springbreak' => true

Другие вопросы по теме