Как изменить многоуровневый массив в PHP

#php

#php

Вопрос:

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

Я пытался $MyArray=array_reverse($MyArray,true); , но он перемещается только "status": "ok" сверху, а все остальные записи внутри products массива остаются неизменными. Итак, как я могу отменить записи products только массива, а не "status": "ok" ?

 {
    "product": [{
        "IDs": ["00000087102110"],
        "Brand": "SONY",
        "Rank": 1
    }, {
        "IDs": ["00000087102120"],
        "Brand": "SAMSUNG",
        "Rank": 1
    }, {
        "GPI14s": ["00000087102150"],
        "Brand": "HCL",
        "Rank": 1
    }, {
        "GPI14s": ["00000087102110"],
        "Brand": "LG",
        "Rank": 1
    }, {
        "GPI14s": ["00000087102120"],
        "Brand": "LENOVO",
        "Rank": 1
    }, {
        "GPI14s": ["00000087102150"],
        "Brand": "HP",
        "Rank": 1
    }],
    "status": "ok"
}
  

Комментарии:

1. $myArray[«product»]=array_reverse($myArray[«product»], true); Вы пробовали это?

2. Кстати, во время отображения вы также можете проанализировать массив в обратном порядке, а не наоборот, прочитав его от последнего к первому

3. Если цель состоит в том, чтобы выполнять цикл только в обратном порядке, тогда выполняйте цикл только от последнего к первому, а не меняйте структуру.

4. Вы делали json_decode() это перед подачей заявки array_reverse() ?

5. @RK Ahir, когда вы print_r() декодируете массив, вы видите, что в нем есть две записи: «продукт» и «статус» на верхнем уровне. array_reverse() повлияет только на верхний уровень, поэтому для изменения продуктов используйте $MyArray['products'] = array_reverse($MyArray['products'])

Ответ №1:

Вы также можете использовать array_merge

     $json = '
    {
        "product": [{
            "IDs": ["00000087102110"],
            "Brand": "SONY",
            "Rank": 1
        }, {
            "IDs": ["00000087102120"],
            "Brand": "SAMSUNG",
            "Rank": 1
        }, {
            "GPI14s": ["00000087102150"],
            "Brand": "HCL",
            "Rank": 1
        }, {
            "GPI14s": ["00000087102110"],
            "Brand": "LG",
            "Rank": 1
        }, {
            "GPI14s": ["00000087102120"],
            "Brand": "LENOVO",
            "Rank": 1
        }, {
            "GPI14s": ["00000087102150"],
            "Brand": "HP",
            "Rank": 1
        }],
        "status": "ok"
    }';

    $decoded = json_decode($json,true);
    $reverse['product'] = array_reverse($decoded['product']);
    unset($decoded['product']);
    $reverse = array_merge($reverse,$decoded);

    echo json_encode($reverse,JSON_PRETTY_PRINT);
  

и вывод с :

 {
"product": [
    {
        "GPI14s": [
            "00000087102150"
        ],
        "Brand": "HP",
        "Rank": 1
    },
    {
        "GPI14s": [
            "00000087102120"
        ],
        "Brand": "LENOVO",
        "Rank": 1
    },
    {
        "GPI14s": [
            "00000087102110"
        ],
        "Brand": "LG",
        "Rank": 1
    },
    {
        "GPI14s": [
            "00000087102150"
        ],
        "Brand": "HCL",
        "Rank": 1
    },
    {
        "IDs": [
            "00000087102120"
        ],
        "Brand": "SAMSUNG",
        "Rank": 1
    },
    {
        "IDs": [
            "00000087102110"
        ],
        "Brand": "SONY",
        "Rank": 1
    }
],
"status": "ok"
}