Как заменить значение ключа "program_id" в массиве JSON? - PullRequest
0 голосов
/ 01 мая 2020

Я прочитал несколько ответов, и решение кажется достаточно простым, но оно просто не работает.

Приведенный ниже выводит «ноль» в конце нового массива:

//Original Array from db
$outArray[] = '[{"id":"1","user_id":"1","program_id":"replace_1,replace_2,replace_3,replace_4,replace_5"}]';

//replacement key with value from string delimited by comma
$program_id= 'replace_1,replace_2,replace_3,replace_4,replace_5';
$string = $program_id; 
$str_arr = explode (",", $string);
$data['program_id'] = $str_arr[0];
$replacement_key_with_value = json_decode($data); //{"program_id":"replace_1"}

//replace 'program_id' value in Original Array
$arrayData = json_decode($outArray, true);
$newArrayData = array_replace($arrayData, $replacement_key_value);
$outArray[] = json_encode($newArrayData);

echo $outArray; //[{"id":"1","user_id":"1","program_id":"replace_1,replace_2,replace_3,replace_4,replace_5},"null"]

Ответы [ 3 ]

1 голос
/ 01 мая 2020

Вы должны преобразовать json в массив, а затем изменить нужный элемент:

//Original Array from db
$outArray = '[{"id":"1","user_id":"1","program_id":"replace_1,replace_2,replace_3,replace_4,replace_5"}]';
$arrayData = json_decode($outArray, true);
var_dump($arrayData);
echo "<BR><BR>";

$program_id= 'replace_1,replace_2,replace_3,replace_4,replace_5';
$string = $program_id;
$str_arr = explode (",", $string);
$outArray = $arrayData;
$outArray[0]['program_id'] = $str_arr[0];
var_dump($outArray);
1 голос
/ 01 мая 2020

в вашем примере кода есть некоторые ошибки, но если я вас правильно понял, этот код проверит ключ program_id внутри вашей строки JSON с новым:

<?php
    //Original json string from db
    $jsonString= '[{"id":"1","user_id":"1","program_id":"replace_1,replace_2,replace_3,replace_4,replace_5"}]';
    $myNewProgramID = 'New Program ID Value';
    //replace 'program_id' value in Original Array
    $arrayData = json_decode($jsonString, true);
    if (count($arrayData)) {
        $newArr = [];
        foreach ($arrayData as $key => $item) {
            $newArr[$key] = $item;
            if (isset($newArr[$key]['program_id'])) {
                $newArr[$key]['program_id'] = $myNewProgramID;
            }
        }
        $arrayData = $newArr;
    }
    $outArray = json_encode($arrayData);
    echo $outArray; //[{"id":"1","user_id":"1","program_id":"New Program ID Value"}]
    exit;
?>
0 голосов
/ 01 мая 2020

Запуск вашего кода приводит к множеству ошибок:

json_decode () ожидает, что параметр 1 будет строкой, данный массив

Неопределенная переменная: replace_key_value

array_replace (): Ожидается, что параметр 1 будет массивом, с нулевым значением

Преобразование массива в строку

Предполагается, что у вас есть строка JSON, первое, что вы должны сделать, это декодировать JSON. Тогда Вы можете заменить что угодно. Например:

<?php

$raw = '{"program_id": "p1,p2,p3,p4"}';

$decoded = json_decode($raw);

$decoded->program_id = str_replace("p2", "p5", $decoded->program_id);

$encoded = json_encode($decoded);

echo $encoded;

В приведенном выше примере мы ищем p2 и заменяем его на p5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...