PHP для каждого массива — сохранение ключей

#php #arrays #foreach

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

Вопрос:

У меня есть файл JSON, структура которого выглядит следующим образом (очень упрощенный):

     [
      {
        "customerId": "M12345",
        "houses": [
          {
             "id": "OBJ12345_1731321200",
             "status": {
               "id": "4",
              "name": "Sold"
            },
           {
            "id": "OBJ12345_1732393235",
            "status": {
              "id": "4",
              "name": "Såld"
            }
          ],
         "plots": [
          {
            "id": "OBJ12345_1771637082",
            "status": {
              "id": "4",
              "name": "Sold"
            }
           ],
        "projects": [],
        "farms": [],
        "commercialPropertys": [],
        "condominiums": [],
        "foreignProperties": [],
        "premises": []
       }
    ]
  

Я сделал это, чтобы получить массив всех объектов, но понятия не имею, как сохранить ключи «дома» или «участки»?

     // Create array of all objects  
      $AllEstatesList = array();
        foreach ($GetEstateList[0] as $GetEstateType) { 
            foreach ($GetEstateType as $GetEstate) { 
                if ($GetEstate["id"] != null) {
                    $AllEstatesList[] = $GetEstate;
                }
            }
        }
  

Мне нужно выяснить, как создать массив, который хранит ключи от родительского элемента и включает их в новый массив…

Результат, который я ищу, таков:

     Array
        (
            [0] => Array
                (
                    [type] => houses
                    [id] => OBJ12345_1731321200
                    [status] => Array
                        (
                            [id] => 4
                            [name] => Såld
                        )

        
                )

            [1] => Array
                (
                    [type] => houses
                    [id] => OBJ12345_1732393235
                    [status] => Array
                        (
                            [id] => 4
                            [name] => Såld
                        )
                )

            [2] => Array
                (
                    [type] => plots
                    [id] => OBJ15053_1771637082
                    [status] => Array
                        (
                            [id] => 4
                            [name] => Såld
                        )

                )

        )
  

пожалуйста, помогите! 🙂

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

1. Пожалуйста, приведите пример структуры данных, которую вы пытаетесь создать.

2. Обновил мой вопрос примером структуры данных, которую я пытаюсь создать

Ответ №1:

Вы хотите сохранить ключ каждого объекта массива при создании первого цикла foreach. Синтаксис выглядит следующим образом:

 foreach ($arr as $key => $value) {
    echo "{$key} => {$value} ";
    print_r($arr);
}
  

Итак, для вашего примера это будет что-то вроде этого:

 // Create array of all objects
  $AllEstatesList = array();
    foreach ($GetEstateList[0] as $EstateType => $GetEstateType) {
        foreach ($GetEstateType as $GetEstate) {
            if ($GetEstate["id"] != null) {
                $GetEstate["type"] = $EstateType;
                $AllEstatesList[] = $GetEstate;
            }
        }
    }
  

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

1. Спасибо, может сработать, но результат не тот, который я ищу, см. Мой новый «ответ», как он должен выглядеть

2. Понял, я обновил свой ответ, чтобы получить желаемый результат. Вероятно, вам следует удалить свой ответ и обновить свой вопрос тем, что вы ищете, просто чтобы следовать правилам переполнения стека.

3. Отлично! Большое вам спасибо! (Я обновил свой вопрос, как вы указали)