Сортировать многомерный массив по значению и не включать в сортировку, если значение приоритета равно 0 - PullRequest
0 голосов
/ 10 апреля 2019

Я должен сортировать ниже данного массива по приоритету.Если значение приоритета равно 0, то не включать в массив сортировки.Я пробовал много способов, но не получил ожидаемого результата.

Array
(
[recently_viewed] => Array
    (
        [priority] => 1
        [no_of_products] => 1
    )

[recently_visited_cat] => Array
    (
        [priority] => 1
        [no_of_products] => 1
    )

[last_ordered_items] => Array
    (
        [priority] => 3
        [no_of_products] => 3
    )

[searched_based] => Array
    (
        [priority] => 0
        [no_of_products] => 4
    )

[cart_based] => Array
    (
        [priority] => 1
        [no_of_products] => 5
    )

[wishlist_based] => Array
    (
        [priority] => 1
        [no_of_products] => 6
    )

[sku_based] => Array
    (
        [priority] => 0
        [no_of_products] => 7
    )
)

Пожалуйста, помогите мне с этим.

Ответы [ 3 ]

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

Вы можете использовать array_filter ( документ - для проверки больше 0), а затем uasort ( документ ):

$arr = [];
$arr["recently_viewed"] = ["priority" => 1, "no_of_products" =>1];
$arr["searched_based"] = ["priority" => 0, "no_of_products" =>4];
$arr["last_ordered_items"] = ["priority" => 3, "no_of_products" =>3];

$arr = array_filter($arr, function ($e) {return $e["priority"];});
uasort($arr, function($a, $b) {
    return $a['priority'] - $b['priority'];
});

Живой пример: 3v4l

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

Вы можете использовать функцию array_filter() для исключения записей с приоритетом 0. После этого вы можете отсортировать массив с помощью функции uasort(). Например:

$arr = array_filter($arr, function($element) {
    return $element['priority'] > 0;
});

uasort($arr, function ($a, $b) {
    if ($a['priority'] === $b['priority']) {
        return 0;
    }
    return ($a['priority'] < $b['priority']) ? -1 : 1;
});
0 голосов
/ 10 апреля 2019

Вы можете использовать array_filter с функцией callback для удаления значений с помощью ZERO

$arr = array_filter($arr, function ($e) {return $e["priority"];});

Это удалит весь подмассив с приоритетами ZERO.

Теперь вы можете применить usort для сортировки массива

usort($arr, function($a, $b)  {
    return $a['priority'] <=> $b['priority'];
});

См. Рабочий код Live

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...