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

У меня есть такой массив-

Array
(
    [0] => Array
        (
            [size] => 12" x 24"
            [size_description] => <p>Rectified</p>

        )

[1] => Array
    (
        [size] => 12" x 24"
        [size_description] => <p>Rectified</p>

    )

[2] => Array
    (
        [size] => 24" x 24"
        [size_description] => <p>Rectified</p>

    )

[3] => Array
    (
        [size] => 24" x 24"
        [size_description] => <p>Rectified</p>

    )

[4] => Array
    (
        [size] => 24" x 48"
        [size_description] => <p>Rectified</p>

    )

[5] => Array
    (
        [size] => 24" x 48"
        [size_description] => <p>Rectified</p>

    )

)

Я хочу получить отдельные подмассивы на основе «размера», и я могу зацикливать как размер, так и размер_описания. Я пробовал array_unique, который работает неправильно, я получаю только одно значение, которое является размером. Я пробовал

$new_array = array_unique(array_map(function($elem){return $elem['size'];}, $size_array));

Я хочу получить оба значения. Есть какой-либо способ сделать это?

Я думаю, вы могли бы использовать фильтр_массива?

AnthonyB 08.04.2019 12:40

Когда вы публикуете данные массива на этом сайте, всегда предлагайте вывод var_export(), чтобы добровольцам не приходилось переформатировать данные, чтобы использовать их в своих тестах. Ваш вопрос будет более ясным с точным ожидаемым результатом. Если значения size_description в данных вашего проекта могут отличаться, вы должны были создать более реалистичный вопрос.

mickmackusa 08.04.2019 13:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
67
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это даст вам желаемый результат

$newArr = array();

foreach($arr as $key => $value){

   if (!in_array($value['size'], $newArr))
    $newArr[$value['size']] = $value;

  }

Результат:-

 Array
(
  [12" x 24"] => Array
    (
        [size] => 12" x 24"
        [size_description] => Rectified


    )

[24" x 24"] => Array
    (
        [size] => 24" x 24"
        [size_description] => Rectified


    )

[24" x 48"] => Array
    (
        [size] => 24" x 48"
        [size_description] => Rectified


    )

)

Спасибо @Rakesh, ваш ответ мне очень помог. Но есть лучший ответ, поэтому мы должны сосредоточиться на качестве.

Al Waqar 08.04.2019 14:44

код, предоставленный @Rakesh_jakhar, классный, но доступ по ключу быстрее в php-массиве, поскольку он хранится в виде хэш-таблицы:

<?php
$size_array = [
    ...
];

$new_array = [];
foreach ($size_array as $item) {
    if (!($size_array[$item['size']] ?? null)) {
        $new_array[$item['size']] = $item;
    }
}

$new_array = array_values($new_array);
var_dump($new_array);

а если вам нужен числовой массив - используйте массив_значений

(демо)

Ответ принят как подходящий

Используйте array_column() для назначения новых ассоциативных ключей с помощью size без изменения содержимого подмассива. Это делается с помощью параметра null.

Тогда просто переиндексируйте с помощью array_values()

Код: (Демо)

$array = [
    ['size' => '12" x 24"', 'size_description' => '<p>Rectified</p>'],
    ['size' => '12" x 24"', 'size_description' => '<p>Rectified</p>'],
    ['size' => '24" x 24"', 'size_description' => '<p>Rectified</p>'],
    ['size' => '24" x 24"', 'size_description' => '<p>Rectified</p>'],
    ['size' => '24" x 48"', 'size_description' => '<p>Rectified</p>'],
    ['size' => '24" x 48"', 'size_description' => '<p>Rectified</p>'],
];

var_export(array_values(array_column($array, null, 'size')));

Ключи массива не могут быть продублированы - уникальные принудительно.

Ответ @AlWaqar Rakesh сделает вызовы функций н в цикле. Мое решение делает в общей сложности 2 вызова, независимо от того, насколько велик ваш массив.

mickmackusa 08.04.2019 14:32

Спасибо @mickmackusa за помощь.

Al Waqar 08.04.2019 14:43

Другие вопросы по теме