Как заменить данные из многомерного массива?

128
25 марта 2021, 21:30

Как в данном массиве найти элемент и поменять соседнее значение? т.е. находим элемент [ID] => 172 и меняем [SORT] => 140 на [SORT] => 200

Array
(
    [0] => Array
        (
            [ID] => 187
            [NAME] => Новая сортировка
            [CODE] => NEW_SORT
            [SORT] => 100            
            [VALUE] => Array
                (
                    [0] => 185=100
                    [1] => 173=200
                    [2] => 172=300
                )
        )
    [1] => Array
        (
            [ID] => 180
            [NAME] => Код цвета
            [CODE] => COLOR
            [SORT] => 97
            [VALUE] => 4956175d-8376-11e9-9251-e41f13e5248e
        )
  [3] => Array
        (
            [ID] => 172
            [NAME] => Столы
            [CODE] => TABLE
            [SORT] => 140
            [VALUE] => Array
                (
                    [0] => 624
                    [1] => 628
                    [2] => 626
                    [3] => 614
                    [4] => 630
                )
    [4] => Array
        (
            [ID] => 185
            [NAME] => Тумбы 
            [CODE] => TUMBA          
            [SORT] => 510            
            [VALUE] => Array
                (
                    [0] => 651
                    [1] => 616
                    [2] => 622
                )
    [5] => Array
        (
            [ID] => 173
            [NAME] => Шкафы
            [CODE] => WARDROBE
            [SORT] => 520
            [VALUE] => Array
                (
                    [0] => 618
                    [1] => 620
                )

array_replace затирает весь массив, оставляя только тот участок что изменил

Answer 1

С помощью цикла перебора массива:

foreach ($data as $key => $array) {
    if ($array['ID'] == 172) {
        $data[$key]['SORT'] = 200;
    }
}
Answer 2

С использованием array_map() и передачей в пользовательскую ф-ю данных о новых SORT-значениях:

<?php
$sort = [
    180 => 300,
    172 => 200
];
$input = [
    [
        'ID' => 187,
        'SORT' => 100,
        'NAME' => 'Новая сортировка',
        'CODE' => 'NEW SORT',
        'VALUE' => ['185=100', '173=200', '172=300']
    ],
    [
        'ID' => 180,
        'SORT' => 97,
        'NAME' => 'Код цвета',
        'CODE' => 'COLOR',
        'VALUE' => '4956175d-8376-11e9-9251-e41f13e5248e'
    ],
    [
        'ID' => 172,
        'SORT' => 140,
        'NAME' => 'Столы',
        'CODE' => 'TABLE',
        'VALUE' => [624, 628, 626, 614, 630]
    ]
];
$output = array_map(
    function ($itm) use ($sort) {
        $id = $itm['ID'];
        if (isset($sort[$id])) {
            $itm['SORT'] = $sort[$id];
        }
        return $itm;
    },
    $input
);
var_dump($output);

DEMO

Answer 3

Не вижу ни одной причины не использовать простой for:

$searchId = 172;
$replaceSortValue = 200;
for ($i = 0; $i < count($array); $i++) {
    if ($array[$i]['ID'] == $searchId) {
        $array[$i]['SORT'] = $replaceSortValue;
        break;
    }
}
READ ALSO
Как вывести массив с помощью api?

Как вывести массив с помощью api?

У меня есть форма, где надо писать счет-фактуру, мне нужно чтобы когда я писал на поле СЧ-111111/11 мне выводил этот счет из api

102
Слияние png изображений

Слияние png изображений

Что нужно поменять в данном коде, чтоб картинка 156png была слева а не внизу? Заранее благодарен

98
Сделать регулярное выражени

Сделать регулярное выражени

Не могу понять как правильно сделать регулярное выражение для следующего текста:

101
Ошибка подключения к серверу ***.***.***.***:3000 - Connection refused

Ошибка подключения к серверу ***.***.***.***:3000 - Connection refused

На сервере хранится node-js файл, который при обращении с нужными параметрами выдаёт html страницу с необходимой информациейПри обращении через...

146