@IgorRastarov

Как удалить повторяющиеся значения в двумерном массиве?

Привет!
Подскажите, пожалуйста, такая проблема. Есть массив

Array
(
[0] => Array
	(
		[ID] => 4887
		[IBLOCK_ID] => 302
		[NAME] => Производитель
		[TEST] => Основное
	)

[1] => Array
	(
		[ID] => 4888
		[IBLOCK_ID] => 302
		[NAME] => Производство
		[TEST] => Основное
	)

[2] => Array
	(
		[ID] => 4889
		[IBLOCK_ID] => 302
		[NAME] => Частота
		[TEST] => Не основные характеристики
	)

)

Видите, у первого и второго повторяется значение ключа TEST. Мне нужно оставить только одно.
Массив многомерный, поэтому array_unique нельзя
Скрипт
$new_arr = array() ;
$result_res = array() ;

foreach ($arr as $key => $value) {
		$new_arr[$key] = $value['TEST'] ;
}

$new_arr = array_unique($new_arr) ;

foreach ($new_arr as $key => $value) {
		$new_arrs[$key] = $arr[$key] ;
}

echo "<pre>";
   print_r($new_arrs);
echo "</pre>";

На выходе полностью удаляет второй массив. То есть не только ключ => значение, а весь
[1] => Array
	(
		[ID] => 4888
		[IBLOCK_ID] => 302
		[NAME] => Производство
		[TEST] => Основное
	)
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
@Merzley
Можно сделать так:
//$arr - изначальный массив

        $arExistsTest = [];
        //здесь используется ссылка (&), чтобы можно было удалять вложенный ключ напрямую
       //т.е. чтобы можно было сделать "unset($value['TEST'])", 
       //а не "unset($arr[$key]['TEST'])"
        foreach ($arr as &$value){
            $currentTestValue = $value['TEST'];
            if (isset($arExistsTest[$currentTestValue]))
                unset($value['TEST']);
            else
                $arExistsTest[$currentTestValue] = true;
        }

        //На данном этапе из массива $arr были удалены 
        //все повторяющиеся значения "TEST",
        //встретившиеся второй раз и далее
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
VladimirAndreev
@VladimirAndreev
php web dev
newArr = array();
foreach(arr as item) {
if(!isset(newArr[item.Test]) {
newArr[] = item;
}
}
Ответ написан
Ваш ответ на вопрос

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

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