получить определенный набор объектов, используя указанное значение php

#php #arrays #laravel

#php #массивы #laravel

Вопрос:

Добрый день! У меня есть вопрос относительно извлечения определенного объекта из массива в Object (Php Laravel). Скажем, например

Здесь находятся данные, которые я хочу получить :

 $variable = [array];
// This is the result whenever I use this on blade to see the result of the variable. 
json_encode($variable, true); 

//result 
   [
     {"0":{
           "id":1,
           "name":"Joe",
           "year":2012,
          },
     }, 
     {"0": 
          {
           "id":2,
           "name":"Mark",
           "year" : 2020,
          }
     }, 
     {"0": 
          {
           "id":2,
           "name":"Mark",
           "year" : 2020,
          }
     }

   ]
  

Я хочу использовать php для извлечения элемента с year = 2020 и id = 2 и вставить его в новую переменную.

поэтому я ожидаю, что результат будет :

   [ 
    { 
     "0": 
          {
           "id":2,
           "name":"Mark",
           "year" : 2020,
          } 
    },
   {"0": 
          {
           "id":2,
           "name":"Mark",
           "year" : 2020,
          }
     }
   ]
  

Я пробовал :

   $new_val = []
  foreach($variable as $key => value) {
     if($value['year'] == "2020" amp;amp; $value['id'] == "2") {
         array_push($new_val , $variable[$key]):
     }
  } 
  

Спасибо, что прочитали мой вопрос

Комментарии:

1. Что вы пробовали? В простейшей форме вы можете просто перебрать свой входной массив, проверить, соответствуют ли год и идентификатор текущего элемента тем значениям, которые вы ищете, и если да, вы просто добавляете текущий элемент в свой выходной массив …

2. 1 к вопросу «что вы пробовали». Как только мы увидим, как далеко вы продвинулись, мы сможем помочь вам выявить любые недостатки в логике или коде.

3. Привет, я предоставил свой фрагмент кода того, что я пробовал. Спасибо за отзыв.

Ответ №1:

 $variable[] = [
    "id"   => 1,
    "name" => "Joe",
    "year" => 2012,
];
$variable[] = [
    "id"   => 2,
    "name" => "Mark",
    "year" => 2020,
];

function _search($array, $name, $year)
{
    foreach ($array as $item) {
        if ($item['name'] == $name amp;amp; $item['year'] == $year) {
            return $item;
        }
    }
    return false;
}
$new = _search($variable, 'Mark', '2020');
print_r($new);````
  

Комментарии:

1. это приводит к ошибке: неопределенный индекс: год, возможно, из-за структуры предоставленного мной массива, не соответствует вашему примеру массива.

2. и он возвращает только 1 элемент

3. это каким-то образом решило проблему, которая у меня есть. Спасибо: D

4. Привет, Клейтон! Похоже, у вас есть довольно убедительный ответ здесь, но часто бывает полезно включить некоторый контекст относительно того, как ваш ответ решает проблему, а не просто фрагмент кода. В противном случае, похоже, вы уже кому-то помогаете. Добро пожаловать на сайт!