2016-01-05 2 views
0

У меня есть массив, который содержит кучу элементов массива, причем каждый элемент массива содержит по два элемента. Это массив:Как отсортировать многомерный массив на основе первого элемента (значение float) для каждого массива?

Array 
(
    Array(0.577677, '/art and entertainment/visual art and design/painting'), 
    Array(0.576528, '/technology and computing/internet technology/email'), 
    Array(0.197858, '/business and industrial/energy/oil/oil and gas prices'), 
    Array(0.707193, '/sports/wrestling'), 
    Array(0.506016, '/style and fashion/beauty/cosmetics'), 
    Array(0.144159, '/food and drink/beverages/alcoholic beverages/cocktails and beer') 
) 

Теперь я хочу отсортировать этот массив на основе первого элемента каждого элемента массива.

Например, в приведенном выше массиве первый элемент в отсортированном массиве должен быть Array(0.707193 [1], '/sports/wrestling') и последний элемент должен быть Array (0.144159, '/food and drink/beverages/alcoholic beverages/cocktails and beer')

Как это сделать в PHP?

+0

посмотрите на примеры в http://php.net/manual/en/function. array-multisort.php, вы можете найти их полезными. – Matt

+0

arsort? [link] (http://php.net/manual/en/function.arsort.php) –

ответ

2

Вы не можете вычитать число друг от друга, чтобы заказать массив, так как у вас есть числа с плавающей точкой в ​​вашем массиве. А функция в вашей сортировочной функции должны возвращать целое число больше, меньше или равен 0.

Кроме того, как отмечено в manual:

Внимание: Возвращение нецелая значения из функция сравнения, такая как float, приведет к внутреннему отлиту к целому возвращаемого значения обратного вызова. Таким образом, значения, такие как 0,99 и 0,1, будут приведены к целочисленному значению 0, которое сравнивает такие значения как равные.

Так просто использовать </> и == в comapre ваши номера и сортировки массива:

uasort($arr,function($a,$b){ 
    if($a['0'] == $b['0']) 
     return 0; 
    return $a['0'] > $b['0'] ? -1 : 1; 
}); 

print_r($arr); 
+0

Это сработало. Благодарю. –

+0

@ManasChaturvedi Добро пожаловать. – Rizier123

0
uasort($memberArray,function($a,$b){ 
      return $a['0'] - $b['0']; 
     }); 
+0

Вы можете прямо 'return $ a ['0'] - $ b ['0']' ^^ – moonwave99

+0

да, что было также хороший подход. позвольте мне отредактировать его –

+0

Над решением возвращается следующий массив: 'Array ([4] => Array ([0] => 0.506016 [1] =>/стиль и мода/красота/косметика) [5] => Массив ([ 0] => 0.144159 [1] =>/еда и напитки/напитки/алкогольные напитки/коктейли и пиво) [3] => Массив ([0] => 0,707193 [1] =>/спорт/борьба) [2] => Массив ([0] => 0.197858 [1] =>/бизнес и промышленные/энергетические/нефтяные/нефтяные и газовые цены) [1] => Массив ([0] => 0,576528 [1] =>/технология и вычислительная/интернет-технология/электронная почта) [0] => Массив ([0] => 0,577677 [1] =>/искусство и развлечения/визуальное искусство и дизайн/живопись)) 'Кажется, не работает –

Смежные вопросы