Подсчитать количество одинаковых значений в массиве JSON и преобразовать его в строку - PullRequest
0 голосов
/ 09 июля 2019

Мой JSON выглядит примерно так:

[
   {"pet_type":"Dog","weight":"26","description":"Akita"},
   {"pet_type":"Dog","weight":"6","description":"Pug"},
   {"pet_type":"Cat","weight":"4","description":"Manx"},
   {"pet_type":"Dog","weight":"12","description":"Beagle"},
   {"pet_type":"Cat","weight":"5","description":"Siberian"}
]

Как я могу преобразовать его в строку, которая будет выглядеть как 3 Dogs, 2 Cats?

Я попытался заполнить array с помощью pet_type, а затем использовать array_count_values для подсчета количества одинаковых записей, а позже я перебираю этот массив в foreach и в строке конкатата, например:

foreach ($count_animals as $type => $number) {
   $animals .=  $number.' '.str_plural($type, $number).', ';
}

Это работает, но мой вопрос, могу ли я сделать это с меньшим количеством кода, прямо из JSON, без использования еще одного цикла foreach?

Ответы [ 2 ]

2 голосов
/ 09 июля 2019
in your controller
$pet = Pet::get();
$petcount = Pet::where('pet_type','Dog')->get();

In your blade
 <h1>{{count($petcount)}} Dog</h1>
2 голосов
/ 09 июля 2019

Если это работает, вы можете сохранить свой код.

Если вы хотите меньше кода, вы можете использовать эту версию:

$json = '[
   {"pet_type":"Dog","weight":"26","description":"Akita"},
   {"pet_type":"Dog","weight":"6","description":"Pug"},
   {"pet_type":"Cat","weight":"4","description":"Manx"},
   {"pet_type":"Dog","weight":"12","description":"Beagle"},
   {"pet_type":"Cat","weight":"5","description":"Siberian"}
]';


print_r(array_count_values(array_map(function($item) {
   return $item['pet_type'];
}, json_decode($json, true))));

Показывает:

Array ( [Dog] => 3 [Cat] => 2 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...