Как заменить один индекс массива другим массивом в стеке переполнения

Я использую Php как мой серверный язык сценариев. В моем проекте я использовал строку Json, декодированную в массив.
Моя проблема заключается в том, как переписать существующий индекс массива на основе значения массива.

мой существующий массив выглядит так:

$array1 =[
{
"Name":"apple",
"color":"red",
"property":[
{
"p1":"value1",
"p2":"value2"}
]
},
{
"Name":"Grape",
"color":"violet",
"property":[
{
"p1":"value1",
"p2":"value2"}
]
}
];

и обновленное содержимое массива выглядит так:

$upadatearray = [
{
"Name":"apple",
"color":"green",
"property":[
{
"p1":"newvalue",
"p2":"newvalue2"}
]
}
];

Я хочу обновить существующий $ array1 новым $ upadatearray, bsed на «Имя». Если он такой же, то заменить.

Я хочу выглядеть так:

$finalarray =[
{
"Name":"apple",
"color":"green",
"property":[
{
"p1":"newvalue",
"p2":"newvalue2"}
]
},
{
"Name":"Grape",
"color":"violet",
"property":
[
{
"p1":"value1",
"p2":"value2"}
]
}
];

Я попробовал это:

for($j=0;$j<count($array1);$j++)
{
if($array1[$j]['Name'] == $upadatearray[0]['Name'])
$finalarray = array_replace($array1[$j],$upadatearray[0]);
}

Но это не будет работать правильно. Есть ли какое-либо возможное решение?

0

Решение

Пусть у вас есть эти два массива:

$array1 ='[{"Name":"apple","color":"red","property":[{"p1":"value1","p2":"value2"}]},{"Name":"Grape","color":"violet","property":[{"p1":"value1","p2":"value2"}]}]';

$upadatearray = '[{"Name":"apple", "color":"green", "property":[{"p1":"newvalue","p2":"newvalue2"}]}]';

$array1 = json_decode($array1, true);
$upadatearray = json_decode($upadatearray, true);

Ты можешь использовать array_replace функция. Но чтобы заставить его заменить предметы, основанные на Name столбец, вы должны сначала сделать этот столбец ключом массива

function make_column_key($arr, $col_name) {
$keys = array_column($arr, $col_name);
$result = array_combine($keys, $arr);
return $result;
}

$array1 = make_column_key($array1, 'Name');
$upadatearray = make_column_key($upadatearray, 'Name');

А теперь просто пользуйся array_replace

$finalarray = array_replace($array1, $upadatearray);

Если вам не нужно Name быть ключом конечного массива, вы можете получить только значения:

$finalarray = array_values($finalarray);
1

Другие решения

привет, я думаю, этот код поможет вам

//what i did is i created a final array variable which gets the value of  old array.
$finalArray = $array1;

//then i perform a foreach loop for old array
foreach ($array1 as $key => $oldarray) {
//inside the updated array
foreach ($upadatearray as $key => $newarray) {
//if old array name and new array name is same replace content on the final array
if ($oldarray['Name'] == $newarray['Name']) {
$finalArray['Name'] = $newarray['Name'];
}
}
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector