добавить новые элементы из массива в объединенный массив, сопоставив ключ - PullRequest
0 голосов
/ 20 января 2019

Я хочу объединить 2 массива путем сопоставления ключа, я пробовал здесь https://3v4l.org/Jp9Jf Я успешно объединил два массива, но я хочу добавить элементы, полученные из $ string2, в результат массива

Существует

$string2='[
{
    "id": "38",
    "question": "Kebersihan Meja Counter dan Meja Fincoy ",
    "type": "NON DOS",
    "last_root": "1",
    "exist_good": "1",
    "exist_not_good": "0",
    "not_exist": "1",
    "n_a": "0"
},
{
    "id": "39",
    "question": "Seragam Sales Counter / Salesman* ",
    "type": "NON DOS",
    "last_root": "1",
    "exist_good": "1",
    "exist_not_good": "0",
    "not_exist": "1",
    "n_a": "0"
},
{
    "id": "40",
    "question": "Kerapihan Sales Counter",
    "type": "NON DOS",
    "last_root": "1",
    "exist_good": "1",
    "exist_not_good": "0",
    "not_exist": "1",
    "n_a": "0"
},
{
    "id": "42",
    "question": "Sales Guide",
    "type": "NON DOS",
    "last_root": "1",
    "exist_good": "1",
    "exist_not_good": "0",
    "not_exist": "1",
    "n_a": "0"
},
{
    "id": "43",
    "question": "Product Card",
    "type": "NON DOS",
    "last_root": "1",
    "exist_good": "1",
    "exist_not_good": "0",
    "not_exist": "1",
    "n_a": "0"
},
{
    "id": "44",
    "question": "Ketersediaan Buku Tamu",
    "type": "NON DOS",
    "last_root": "1",
    "exist_good": "1",
    "exist_not_good": "0",
    "not_exist": "1",
    "n_a": "0"
},
{
    "id": "45",
    "question": "Ketersediaan Price List",
    "type": "NON DOS",
    "last_root": "1",
    "exist_good": "1",
    "exist_not_good": "0",
    "not_exist": "1",
    "n_a": "0"
},
{
    "id": "46",
    "question": "Ketersedian Rak Brosur ",
    "type": "NON DOS",
    "last_root": "1",
    "exist_good": "1",
    "exist_not_good": "0",
    "not_exist": "1",
    "n_a": "0"
},
{
    "id": "47",
    "question": "Ketersediaan Flyer*/brosur\t",
    "type": "NON DOS",
    "last_root": "1",
    "exist_good": "1",
    "exist_not_good": "0",
    "not_exist": "1",
    "n_a": "0"
}
]

Я хочу, чтобы мой результат был таким

[{"id":"7ac648ce-18aa-11e9-b673-005056be36b2","answer":"1","id_question":"39","pi":"very good","ca":null,"pic":null,"new_deadline":null,"reason":null,"notes":null,"deadline":null,"type":"NON DOS","last_root":"1","exist_good":"1","exist_not_good":"0","not_exist":"1","n_a":"0"},{"id":"8653ef3d-18aa-11e9-b673-005056be36b2","answer":"3","id_question":"40","pi":"no problem","ca":null,"pic":null,"new_deadline":null,"reason":null,"notes":null,"deadline":null,"type":"NON DOS","last_root":"1","exist_good":"1","exist_not_good":"0","not_exist":"1","n_a":"0"},{"id":"Kebersihan Meja Counter dan Meja Fincoy ","type":"NON DOS","last_root":"1","exist_good":"1","exist_not_good":"0","not_exist":"1","n_a":"0","id_question":"38","answer":null,"pi":null,"ca":null,"pic":null,"new_deadline":null,"reason":null,"notes":null,"deadline":null},{"id":"Sales Guide","type":"NON DOS","last_root":"1","exist_good":"1","exist_not_good":"0","not_exist":"1","n_a":"0","id_question":"42","answer":null,"pi":null,"ca":null,"pic":null,"new_deadline":null,"reason":null,"notes":null,"deadline":null},{"id":"Product Card","type":"NON DOS","last_root":"1","exist_good":"1","exist_not_good":"0","not_exist":"1","n_a":"0","id_question":"43","answer":null,"pi":null,"ca":null,"pic":null,"new_deadline":null,"reason":null,"notes":null,"deadline":null},{"id":"Ketersediaan Buku Tamu","type":"NON DOS","last_root":"1","exist_good":"1","exist_not_good":"0","not_exist":"1","n_a":"0","id_question":"44","answer":null,"pi":null,"ca":null,"pic":null,"new_deadline":null,"reason":null,"notes":null,"deadline":null},{"id":"Ketersediaan Price List","type":"NON DOS","last_root":"1","exist_good":"1","exist_not_good":"0","not_exist":"1","n_a":"0","id_question":"45","answer":null,"pi":null,"ca":null,"pic":null,"new_deadline":null,"reason":null,"notes":null,"deadline":null},{"id":"Ketersedian Rak Brosur ","type":"NON DOS","last_root":"1","exist_good":"1","exist_not_good":"0","not_exist":"1","n_a":"0","id_question":"46","answer":null,"pi":null,"ca":null,"pic":null,"new_deadline":null,"reason":null,"notes":null,"deadline":null},{"id":"Ketersediaan Flyer*\/brosur\t","type":"NON DOS","last_root":"1","exist_good":"1","exist_not_good":"0","not_exist":"1","n_a":"0","id_question":"47","answer":null,"pi":null,"ca":null,"pic":null,"new_deadline":null,"reason":null,"notes":null,"deadline":null}]

, но я не могу добавить элемент type, last_root, exist_good,exist_not_good, not_exist и n_a из $string2 в массив.Как можно добавить эти предметы?Пожалуйста, кто-нибудь, помогите мне, и моя версия php 5.3.3

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Это решение более многословно, чем могло бы быть написано, но выгода от этого дизайна кодирования заключается в простоте обслуживания и порядке элементов подмассива.Если вы посмотрите внимательно, то увидите, что каждый элемент в выходных данных всегда находится в одном и том же порядке, независимо от того, из какого массива он поступил.

Поскольку в этом решении используется только языковая конструкция (foreach()), онбудет работать в любой версии php.

Код: ( Демо )

foreach ($array1 as $row) {
    $result[$row['id_question']]['id']             = $row['id'];
    $result[$row['id_question']]['id_question']    = $row['id_question'];
    $result[$row['id_question']]['type']           = null;
    $result[$row['id_question']]['answer']         = $row['answer'];
    $result[$row['id_question']]['pi']             = $row['pi'];
    $result[$row['id_question']]['ca']             = $row['ca'];
    $result[$row['id_question']]['pic']            = $row['pic'];
    $result[$row['id_question']]['deadline']       = $row['deadline'];
    $result[$row['id_question']]['new_deadline']   = $row['new_deadline'];
    $result[$row['id_question']]['reason']         = $row['reason'];
    $result[$row['id_question']]['notes']          = $row['notes'];
    $result[$row['id_question']]['last_root']      = null;
    $result[$row['id_question']]['exist_good']     = null;
    $result[$row['id_question']]['exist_not_good'] = null;
    $result[$row['id_question']]['not_exist']      = null;
    $result[$row['id_question']]['n_a']            = null;
}

foreach ($array2 as $row) {
    if (isset($result[$row['id']])) {         // default elements already declared, just overwrite the nulls
        // $row['question'] is omitted from data
        $result[$row['id']]['type']           = $row['type'];
        $result[$row['id']]['last_root']      = $row['last_root'];
        $result[$row['id']]['exist_good']     = $row['exist_good'];
        $result[$row['id']]['exist_not_good'] = $row['exist_not_good'];
        $result[$row['id']]['not_exist']      = $row['not_exist'];
        $result[$row['id']]['n_a']            = $row['n_a'];
    } else {
        $result[$row['id']]['id']             = $row['question'];  // no id, so use question
        $result[$row['id']]['id_question']    = null;
        $result[$row['id']]['type']           = $row['type'];
        $result[$row['id']]['answer']         = null;
        $result[$row['id']]['pi']             = null;
        $result[$row['id']]['ca']             = null;
        $result[$row['id']]['pic']            = null;
        $result[$row['id']]['deadline']       = null;
        $result[$row['id']]['new_deadline']   = null;
        $result[$row['id']]['reason']         = null;
        $result[$row['id']]['notes']          = null;
        $result[$row['id']]['last_root']      = $row['last_root'];
        $result[$row['id']]['exist_good']     = $row['exist_good'];
        $result[$row['id']]['exist_not_good'] = $row['exist_not_good'];
        $result[$row['id']]['not_exist']      = $row['not_exist'];
        $result[$row['id']]['n_a']            = $row['n_a'];
    }
}
var_export($result);

Выход:

array (
  39 => 
  array (
    'id' => '7ac648ce-18aa-11e9-b673-005056be36b2',
    'id_question' => '39',
    'type' => 'NON DOS',
    'answer' => '1',
    'pi' => 'very good',
    'ca' => NULL,
    'pic' => NULL,
    'deadline' => NULL,
    'new_deadline' => NULL,
    'reason' => NULL,
    'notes' => NULL,
    'last_root' => '1',
    'exist_good' => '1',
    'exist_not_good' => '0',
    'not_exist' => '1',
    'n_a' => '0',
  ),
  40 => 
  array (
    'id' => '8653ef3d-18aa-11e9-b673-005056be36b2',
    'id_question' => '40',
    'type' => 'NON DOS',
    'answer' => '3',
    'pi' => 'no problem',
    'ca' => NULL,
    'pic' => NULL,
    'deadline' => NULL,
    'new_deadline' => NULL,
    'reason' => NULL,
    'notes' => NULL,
    'last_root' => '1',
    'exist_good' => '1',
    'exist_not_good' => '0',
    'not_exist' => '1',
    'n_a' => '0',
  ),
  38 => 
  array (
    'id' => 'Kebersihan Meja Counter dan Meja Fincoy ',
    'id_question' => NULL,
    'type' => 'NON DOS',
    'answer' => NULL,
    'pi' => NULL,
    'ca' => NULL,
    'pic' => NULL,
    'deadline' => NULL,
    'new_deadline' => NULL,
    'reason' => NULL,
    'notes' => NULL,
    'last_root' => '1',
    'exist_good' => '1',
    'exist_not_good' => '0',
    'not_exist' => '1',
    'n_a' => '0',
  ),
  42 => 
  array (
    'id' => 'Sales Guide',
    'id_question' => NULL,
    'type' => 'NON DOS',
    'answer' => NULL,
    'pi' => NULL,
    'ca' => NULL,
    'pic' => NULL,
    'deadline' => NULL,
    'new_deadline' => NULL,
    'reason' => NULL,
    'notes' => NULL,
    'last_root' => '1',
    'exist_good' => '1',
    'exist_not_good' => '0',
    'not_exist' => '1',
    'n_a' => '0',
  ),
...
)

Здесь вы можете использоватьksort(), чтобы упорядочить строки данных по id, array_values(), чтобы переиндексировать вывод или преобразовать в json с помощью json_encode().

0 голосов
/ 20 января 2019

Чтобы упростить ваш код, я постарался сделать это за несколько шагов. Это сохраняет движущиеся данные несколько раз (комментарии в коде) ...

$json = json_decode($string, true);
$json2 = json_decode($string2, true);

// Create $result with an array indexed by id_question
$result = array_column($json, null, "id_question");

foreach($json2 as $key)
{
    // If question doesn't exist
    if(!isset($result[$key['id']]))
    {
        // Set values from new question
        $row=$key;
        $row["id_question"]=$key['id'];
        $row["id"]=$key['question'];
        // Remove this element as not needed in new array
        unset ( $row['question']);
        $row["answer"]=null;
        $row["pi"]=null;
        $row["ca"]=null;
        $row["pic"]=null;
        $row["new_deadline"]=null;
        $row["reason"]=null;
        $row["notes"]=null;
        $row["deadline"]=null;
        // Add to result
        $result[]=$row;
    }
    else
    {
        // Question is already present, just add in new details
        $result[$key['id']]["type"]=$key['type'];
        $result[$key['id']]["last_root"]=$key['last_root'];
        $result[$key['id']]["exist_good"]=$key['exist_good'];
        $result[$key['id']]["exist_not_good"]=$key['exist_not_good'];
        $result[$key['id']]["not_exist"]=$key['not_exist'];
        $result[$key['id']]["n_a"]=$key['n_a'];
    }
}

// Use array_values() to remove keys (the question ID) and encode result
$json=json_encode(array_values($result));
print_r($json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...