簡體   English   中英

為什么 array_merge_recursive() 不返回所需的輸出 PHP

[英]Why is array_merge_recursive() not returning required output PHP

我有以下字符串,我試圖遞歸地組合內部數組停止並將結果打印為 json 數據,但似乎array_merge_recursive()函數沒有產生所需的輸出。

每次運行代碼時得到的結果都是一樣的。 我是否遺漏了什么或者是否有替代函數來實現組合內部數組?

$routes = '[
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "1",
                "name": "City Centre (Pangani)"
            }
        ]
    },
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "2",
                "name": "Muthaiga"
            }
        ]
    },
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "3",
                "name": "Utalii"
            }
        ]
    },
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "4",
                "name": "KCA"
            }
        ]
    },
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "5",
                "name": "Drive Inn"
            }
        ]
    },
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "6",
                "name": "Allsops"
            }
        ]
    },
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "7",
                "name": "GSU"
            }
        ]
    },
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "8",
                "name": "Roasters"
            }
        ]
    },
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "9",
                "name": "Ngumba"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "1",
                "name": "City Centre (Pangani)"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "2",
                "name": "Muthaiga"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "3",
                "name": "Utalii"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "4",
                "name": "KCA"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "5",
                "name": "Drive Inn"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "6",
                "name": "Allsops"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "7",
                "name": "GSU"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "8",
                "name": "Roasters"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "9",
                "name": "Ngumba"
            }
        ]
    }
]';

這是所需的輸出

[
    {
        "id": "1",
        "name": "CBD - Ngumba via Thika Road",
        "stop": [
            {
                "id": "1",
                "name": "City Centre (Pangani)"
            },
            {
                "id": "2",
                "name": "Muthaiga"
            },
            {
                "id": "3",
                "name": "Utalii"
            },
            {
                "id": "4",
                "name": "KCA"
            },
            {
                "id": "5",
                "name": "Drive Inn"
            },
            {
                "id": "6",
                "name": "Allsops"
            },
            {
                "id": "7",
                "name": "GSU"
            },
            {
                "id": "8",
                "name": "Roasters"
            },
            {
                "id": "9",
                "name": "Ngumba"
            }
        ]
    },
    {
        "id": "2",
        "name": "Ngumba - City Centre via Thika Road",
        "stop": [
            {
                "id": "1",
                "name": "City Centre (Pangani)"
            },
            {
                "id": "2",
                "name": "Muthaiga"
            },
            {
                "id": "3",
                "name": "Utalii"
            },
            {
                "id": "4",
                "name": "KCA"
            },
            {
                "id": "5",
                "name": "Drive Inn"
            },
            {
                "id": "6",
                "name": "Allsops"
            },
            {
                "id": "7",
                "name": "GSU"
            },
            {
                "id": "8",
                "name": "Roasters"
            },
            {
                "id": "9",
                "name": "Ngumba"
            }
        ]
    }
]

這是我嘗試過的,但仍然返回原始字符串中的數據。

$routes = json_decode($routes);
echo json_encode(array_merge_recursive($routes));

它不起作用,因為這不是該功能的工作方式。 您需要編寫一個自定義函數來實現所需的結果。

function merge_result($data) 
{
   $result = [];
   $index = 0;
   $keys = [];
   foreach($data as $row) 
   {
       if(array_key_exists($row['id'], $keys)){
           $_index = $keys[$row['id']];
           $result[$_index]['stop'] = array_merge($result[$_index]['stop'], $row['stop']);
       }else {
           $keys[$row['id']] = $index; 
           $result[$index] = $row; 
          $index++;
       }

   }
  return $result;
}

$routes = merge_result(json_decode($data, true));

PS:我無法測試,因為我在手機上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM