пытаясь объединить эти два массива JSON в PHP - PullRequest
0 голосов
/ 28 мая 2018

Я пробовал такие вещи, как json_combine и array_merge, но я не могу понять, как это сделать.

  $query2 = "SELECT DISTINCT cat_id,cat_name FROM review WHERE user_id = ? AND public_or_private = 0";
    $stmt2 = $con->prepare($query2) or die(mysqli_error($con));
    $stmt2->bind_param('i', $user_id) or die ("MySQLi-stmt binding failed ".$stmt2->error);
    $stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error);
    $result2 = $stmt2->get_result();

                    $array1 = array();

                    while ($row = mysqli_fetch_assoc($result2)) {

                        $array1['results'][] = $row;

                    }

echo json_encode($array1);

json_encode дает мне:

{"results":[{"cat_id":4,"cat_name":"dentist"}]}

И далее в моем коде у меня есть:

$query3 = "SELECT DISTINCT cat_id,cat_name FROM review WHERE public_or_private = 2";
                $result3 = mysqli_query($con,$query3);

                $array2 = array();

                while($row = mysqli_fetch_assoc($result3)) {

                $array2['results'][] = $row;

                }  

echo json_encode($array2);

json_encode дает мне:

{
    "results": [{
        "cat_id": "8",
        "cat_name": "dental hygienist"
    }, {
        "cat_id": "5",
        "cat_name": "stocktaker"
    }, {
        "cat_id": "9",
        "cat_name": "builder"
    }]
}

Итак, у меня всего два массива json:

{
    "results": [{
        "cat_id": 4,
        "cat_name": "dentist"
    }]
} 

{
    "results": [{
            "cat_id": "8",
            "cat_name": "dental hygienist"
        }, {
            "cat_id": "5",
            "cat_name": "stocktaker"
        },
        {
            "cat_id": "9",
            "cat_name": "builder"
        }
    ]
}

Но как я могу объединить их в одно:

{
        "results": [{
                "cat_id": 4,
                "cat_name": "dentist"
            }, {
                "cat_id": "8",
                "cat_name": "dental hygienist"
            }, {
                "cat_id": "5",
                "cat_name": "stocktaker"
            },
            {
                "cat_id": "9",
                "cat_name": "builder"
            }
        ]
    }

Я пробовал что-то вроде:

 $jsonArray = array();
foreach (array_combine( $array1, $array2 ) as $name => $value) {
    $jsonArray[] = array('cat_id' => $name, 'cat_name' => $value);
}

echo $json = json_encode($jsonArray); 

, но все еще не мог заставить его работать должным образом.

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Полагаю, вы хотите использовать array_merge_recursive.

echo json_encode(array_merge_recursive($array1, $array2));
0 голосов
/ 28 мая 2018

Предполагая, что у вас уже есть массивы, вы можете сделать следующее:

$res1 = [
    "results"=> [[
        "cat_id"=> 4,
        "cat_name"=> "dentist"
    ]]
]; 

$res2 = [
    "results"=> [[
            "cat_id"=> "8",
            "cat_name"=> "dental hygienist"
        ], [
            "cat_id"=> "5",
            "cat_name"=> "stocktaker"
        ],
        [
            "cat_id"=> "9",
            "cat_name"=> "builder"
        ]
    ]
];

$combinedArray = array_merge_recursive($res1, $res2);
$jsonCombinedArray = json_encode($combinedArray);

В результате получается

{
  "results": [
    {"cat_id":4,"cat_name":"dentist"},
    {"cat_id":"8","cat_name":"dental hygienist"},
    {"cat_id":"5","cat_name":"stocktaker"},
    {"cat_id":"9","cat_name":"builder"}
  ]
}
0 голосов
/ 28 мая 2018

Это не array_combine Вам нужно объединить оба массива

$array1 = json_decode($array1, true);
$array2 = json_decode($array2, true);
$final_array =  array_merge($array1['results'], $array2['results']);
...