Как удалить подмассивы с дублированным значением столбца? - PullRequest
2 голосов
/ 08 апреля 2019

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

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>

    )

)

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

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

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

Ответы [ 3 ]

2 голосов
/ 08 апреля 2019

Используйте 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')));

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

2 голосов
/ 08 апреля 2019

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

$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


    )

)
1 голос
/ 08 апреля 2019

код, заданный @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_values ​​

(демо)

...