как мне получить доступ к элементам массива в laravel?

#arrays #laravel #laravel-notification

#массивы #laravel #laravel-уведомление

Вопрос:

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

 {{dd($numberofnotifications)}}
 

Я получаю следующее:

введите описание изображения здесь

Но значение, которое мне нужно сравнить, находится в разделе «атрибуты»

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

Когда я распечатываю каждый элемент массива, я получаю следующий формат:

 {"id":"96a40ebb-a2d1-44d8-9600-e94dd026f152","type":"App\Notifications\CommentCreated","notifiable_type":"App\User","notifiable_id":1,"data":{"comment_id":9,"data":{"name":"John","date":"2020-12-30T08:37:47.000000Z","email":"John@gmail.com","post":2,"body":"test"},"message":"John commented on your post"},"read_at":null,"created_at":"2020-12-30T08:37:47.000000Z","updated_at":"2020-12-30T08:37:47.000000Z"}
 

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

1. Вы добавили цикл при сборе? Он предоставит вам элемент один за другим, затем вы получите доступ к нему с помощью объектной нотации.

2. нет, у меня нет. буду ли я делать это с помощью @foreach?

3. Да, чего ты тогда ждешь 🙂

4. вы хотите сравнить, что о каждом элементе с каким значением?

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

Ответ №1:

Кажется, что элементы представляют собой массив DatabaseNotifications. Итак, вы можете получить каждый элемент вручную по его индексу:

 $numberofnotifications[0]->id;
// or
$numberofnotifications[0]->type
 

или вы можете использовать foreach цикл:

 foreach ($numberofnotifications as $notification) {
    $notification->id;
}
 

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

1. Итак, мне удалось разобраться с этим по-вашему, но теперь, как мне подсчитать, сколько из них равно значению? это то, что мне удалось использовать, чтобы получить значение имени: $notification->data[‘данные’] [‘имя’], и вот как я сравниваю их: $notification->data[‘данные’] [‘имя’] == Auth::пользователь()-> имя. Как бы я подсчитал, сколько это возвращает

2. Затем используйте where() и count() для получения ваших данных: $data = Model::query()->where(‘your_field’, $your_value)->count();

3. что это: transform($notification->data[‘данные’][‘имя’])

4. Извините, я запутался. Я отредактировал свой комментарий выше

5. вот так: $data = $numberofnotifications->где($notification->data[‘данные’][‘имя’], ‘==’, Auth::user()->имя)-> count(). Это дает мне количество 5, которое является общим количеством неверных элементов. но если я выну where() и count, он отобразит все значения имен, равные текущему имени пользователя, которое равно 4, что правильно

Ответ №2:

Поскольку результатом является коллекция, вы можете преобразовать их с помощью

 $numberofnotifications->toArray();
 

Ответ №3:

вам нужно будет использовать foreach для перебора коллекции:

 foreach($numberofnotification as $number)
    {
        $number->name;   //name here is the "name" of the attribute you want to access
    }
 

если вы хотите сохранить их в массиве, то:

 foreach($numberofnotification as $number)
    {
       $attributes[]=$number->name;   //name here is the "name" of the attribute you want to access
    }

 
 

Ответ №4:

Вы пробовали это

// учтите, что $username — это имя пользователя, вошедшего в систему

 $filtered_count = $numberofnotifications->where('name', $username)->count();
 

и если вы хотите, чтобы запись

 $filtered = $numberofnotifications->where('name', $username)->all();