Сортировать многомерный ассоциативный массив путем умножения двух ключевых значений - PullRequest
0 голосов
/ 04 июня 2018

У меня есть массив, как показано ниже:

$myarray = array(
   array('itemid' => '1','height'=>'5','length' => '5'),//area=25(height*length)
   array('itemid' => '2','height'=>'2','length' => '5'),//area=10(height*length)
   array('itemid' => '3','height'=>'5','length' => '3'),//area=15(height*length) 
  );

Я бы хотел отсортировать его в порядке возрастания, рассчитав площадь путем умножения высоты и длины (строковых значений) каждого элемента массива, как показано ниже

$sortedarray = array(
   array('itemid' => '2','height'=>'2','length' => '5'),//area=10(height*length)
   array('itemid' => '3','height'=>'5','length' => '3'),//area=15(height*length)
   array('itemid' => '1','height'=>'5','length' => '5'),//area=25(height*length)
);

Я знаю, что php имеет функцию array_multisort, но мне нужно отсортировать, вычислив площадь.

1 Ответ

0 голосов
/ 04 июня 2018

Вы можете использовать usort.

Функция обратного вызова Usort ожидает, -1 (отрицательное число), если $a первый.1 (положительное число), если $b - должно идти первым, и 0, если в заказе нет изменений.

Пример: область $a равна 25, а $b равна 10. 25-10 = 15, чтоэто положительное число.Таким образом, usort прикажет $b впереди $a

<code>$myarray = array(
    array('itemid' => '1','height'=>'5','length' => '5'),//area=25
    array('itemid' => '2','height'=>'2','length' => '5'),//area=10
    array('itemid' => '3','height'=>'5','length' => '3'),//area=15 
);

usort( $myarray, function($a, $b){
    return ( $a['height'] * $a['length'] )  - ( $b['height'] * $b['length'] );
});

echo "<pre>";
print_r( $myarray );
echo "
";

Это приведет к:

Array
(
    [0] => Array
        (
            [itemid] => 1
            [height] => 5
            [length] => 5
        )

    [1] => Array
        (
            [itemid] => 3
            [height] => 5
            [length] => 3
        )

    [2] => Array
        (
            [itemid] => 2
            [height] => 2
            [length] => 5
        )

)

Док: usort ()

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