【问题标题】:PHP nesting duplicates into its own objectPHP将重复项嵌套到自己的对象中
【发布时间】:2018-01-11 10:42:37
【问题描述】:

下面的输出是 MySQL 查询的结果。一些公司有多个位置和位置编号。每次我希望该公司的所有位置都嵌套在第一个公司数组下时,而不是创建一个新的“公司”数组。

所以本质上在 company 数组下会有另一个对象包含另一个位置/号码。

我的大脑让我失望了。有人愿意帮忙吗?

<?php

$json = '[
{
    "Company 1": [
        {
            "location": "Location Name 1",
            "number": "0001"
        }
    ]
},
{
    "Company 1": [
        {
            "location": "Location Name 2",
            "number": "00045"
        }
    ]
},
{
    "Company 2": [
        {
            "location": "Location Name 1",
            "number": "00021"
        }
    ]
}
]';

$x = json_decode($json);
var_dump($x)
?>

【问题讨论】:

  • 请同时添加您的 sql 查询。这应该通过更改查询来解决,而不是使用 php.ini 来解决。您可以通过使用 GROUP BY
  • @OleHaugset 这是一个糟糕的查询。见:kopy.io/O557f#l5XK4YvyljOws4

标签: php arrays json object


【解决方案1】:

您可以通过迭代数组并将数据存储在新数组中来实现:

$x = json_decode($json, true);
$x2 = array();
foreach($x as $k => $v)
{
    foreach($v as $k2 => $v2)
    {
        $x2[$k2][] = $v2[0];
    }
}
print_r($x2);

结果将是:

Array
(
    [Company 1] => Array
        (
            [0] => Array
                (
                    [location] => Location Name 1
                    [number] => 0001
                )

            [1] => Array
                (
                    [location] => Location Name 2
                    [number] => 00045
                )

        )

    [Company 2] => Array
        (
            [0] => Array
                (
                    [location] => Location Name 1
                    [number] => 00021
                )

        )

)

【讨论】:

    【解决方案2】:

    您可以使用 array_merge_recursive 函数用一行来完成:

    $arr = array_merge_recursive(...json_decode($json, True));
    

    demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多