У меня есть такой массив-
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));
Я хочу получить оба значения. Есть какой-либо способ сделать это?
Когда вы публикуете данные массива на этом сайте, всегда предлагайте вывод var_export(), чтобы добровольцам не приходилось переформатировать данные, чтобы использовать их в своих тестах. Ваш вопрос будет более ясным с точным ожидаемым результатом. Если значения size_description в данных вашего проекта могут отличаться, вы должны были создать более реалистичный вопрос.






Это даст вам желаемый результат
$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, ваш ответ мне очень помог. Но есть лучший ответ, поэтому мы должны сосредоточиться на качестве.
код, предоставленный @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 за помощь.
Я думаю, вы могли бы использовать фильтр_массива?