سؤال

لدي صفيف متعدد الأبعاد مثل هذا:

array ([0] => array ([id] => 1 [name] => john doe [title] => Mr [days] => 10) 
[1] => array ([id] => 2 [name] => Joe Smith [title] => Dr [days] => 22) 
[2] => array ([id] => 3 [name] => John Jones [title] => Mr [days] => 3))

أحتاج إلى فرز المصفوفات الداخلية بحيث يتم إرجاع البيانات بالترتيب الطبيعي بحلول مفتاح الأيام.

مثل هذا:

array ([2] => array ([id] => 3 [name] => John Jones [title] => Mr [days] => 3)
[0] => array ([id] => 1 [name] => john doe [title] => Mr [days] => 10) 
[1] => array ([id] => 2 [name] => Joe Smith [title] => Dr [days] => 22))

أعتقد أن ما أحتاجه هو وظيفة تطبق Natsort على صفيف متعدد الأبعاد بواسطة مفتاح $ ، لكن حتى الآن لم أتمكن من العثور على أي وظائف تقوم بأي شيء آخر غير الفرز القياسي.

أي مساعدة؟

هل كانت مفيدة؟

المحلول

ما تريد أوتورت.

يمكنك كتابة رد اتصال لإجراء المقارنة لك:

usort($data, function($a, $b) {
    return ($a['days'] > $b['days'])
           ? 1 
           : ($a['days'] < $b['days'])
             ? -1 
             : 0;
});

إخلاء المسؤولية: تحتاج إلى PHP 5.3.x حتى يعمل هذا ، وإلا create_function أو سلفا وظيفة المقارنة.

نصائح أخرى

قليلا من نهج مختلف:

$days = array();
foreach($array as $key => $val) {
    $days[$key] = $val['days'];
}
array_multisort($days, $array); //$array being your input array

نتيجة:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Jay Doe
            [title] => Mr
            [days] => 3
        )

    [1] => Array
        (
            [id] => 1
            [name] => John Doe
            [title] => Mr
            [days] => 10
        )

    [2] => Array
        (
            [id] => 2
            [name] => Joe Doe
            [title] => Mr
            [days] => 22
        )

)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top