Как связать одно и то же значение ключа в массиве? - PullRequest
0 голосов
/ 11 апреля 2019

В настоящее время возникают проблемы в массиве.Я не могу получить желаемый результат.

Это мой массив.

[
 {
  "id": 1,
  "name": "Antonio Trillanes",
  "category": "libel" 
 },
 {
  "id": 2,
  "name": "Liela De Lima",
  "category": "libel" 
 },
 {
  "id": 3,
  "name": "Gloria Macapagal Arroyo",
  "category": "plunder" 
 },
]

Это мой желаемый результат.

Я хочу это таким образом.

[
 libel: [
          {
           "id": 1,
           "name": "Antonio Trillanes",
           "category": "libel" 
          },
          {
           "id": 2,
           "name": "Liela De Lima",
           "category": "libel" 
          }
        ],
 plunder: [
           {
            "id": 3,
            "name": "Gloria Macapagal Arroyo",
            "category": "plunder" 
           },
          ]
]

Это мой код.

$convicted_persons = [];
$persons = Persons::all();
foreach($persons as $person) {
     $convicted_persons [ $person['category'] ] = $person;
}

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

Что я пропустил?

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

Это то, что я сделал в простом массиве:

$array = array(
        array(
            "id" => 1,
            "name" => "Antonio Trillanes",
            "category" => "libel"
        ),
        array(
            "id" => 2,
            "name" => "Liela De Lima",
            "category" => "libel"
        ),
        array(
            "id" => 3,
            "name" => "Gloria Macapagal Arroyo",
            "category" => "plunder"
    ));
    $new_array = array();
    foreach ($array as $value){
        $new_array[$value['category']][] = $value;
    }

Просто обновите свою строку, как показано ниже, Просто добавьте [] после [ $person['category'] ]:

$convicted_persons [ $person['category'] ] = $person;
$convicted_persons [ $person['category'] ][] = $person;
1 голос
/ 11 апреля 2019

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

https://laravel.com/docs/5.8/collections#method-groupby

Persons::all() уже возвращает коллекцию, заполненную Person экземплярами модели, поэтому вы можете сделать это:

$persons = Persons::all();
$convicted_persons = $persons->groupBy('category');
1 голос
/ 11 апреля 2019

Как объект, который вы можете сделать так,

$temp = [];
foreach ($arr as $key => $value) {
    $temp[$value->category][] = $value; // if not object $temp[$value['category']][] = $value;
}
print_r($temp);die;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...