Как заменить данные в массиве, из данных этого же массива?

Прошу помощи гуру PHP
Есть большой массив свойств в котором нужно заменить часть элементов на элементы из этого же массива. В свойстве "Новая сортировка" есть данные которые нужно засеменить, т.е. ищем ID элемента 185 и устанавливаем SORT 100 и тд
Вот часть массива.
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
                )

Я сначала получаю новый массив, свойств которые нужно заменить
$sort_arr_id = array();
foreach ($arResult["DISPLAY_PROPERTIES"] as $key => $value2) {
    if($value2['CODE'] == 'ADD_SORT_ID') $sort_arr_id = array($value2['VALUE']);   
}
print_r($sort_arr_id);

получаю
Array
(
    [0] => Array
        (
            [0] => 185=100
            [1] => 173=200
            [2] => 172=300
        )

)

т.е. у элемента с ID 185 нужно установить сортировку SORT 100, у 173 сортировку 200, у 172 сортировку 300.

Преобразовываю текст в массив
foreach ($sort_arr_id as $key => $value2) {
    foreach ($value2 as $key2 => $value3) {
        $arr = explode("=", $value3);
        $sort_arr_id[$key2] = array('ID' => $arr['0'], 'SORT' => $arr['1']);       
    }
}

и пытаюсь заменить данные
foreach ($sort_arr_id as $value5) {
    foreach ($arResult["DISPLAY_PROPERTIES"] as $value6) {
        if($value6['ID'] == $value5['ID']) {
            $new_arr_arr[] = ['ID' => $value5['ID'], 'SORT' => $value5['SORT']];
              }
          }
      }

Что я делаю не так?
Пробовал клеить array_merge но он просто дописывал в конец массив данные их которого нужно вписать.
Может есть способ проще?
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
xEpozZ
@xEpozZ
Веб-разработчик
$values = [1 => 100, 2 => 200, 3 => 300];
foreach ($values as $key => &$value) {
    $value = $key;
}

print_r($values);


Array
(
    [1] => 1
    [2] => 2
    [3] => 3
)


sandbox.onlinephpfunctions.com/code/ab8d1a36c9f152...

По такому принципу получаете массив и изменяете исходный.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы