php title - فرز مصفوفة متعددة الأبعاد حسب القيمة




html tag (7)

function aasort (&$array, $key) {
    $sorter=array();
    $ret=array();
    reset($array);
    foreach ($array as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$array[$ii];
    }
    $array=$ret;
}

aasort($your_array,"order");

كيف يمكنني فرز هذه الصفيف من خلال قيمة مفتاح "الطلب"؟ على الرغم من أن القيم متسلسلة حاليًا ، فإنها لن تكون دائمًا.

Array
(
    [0] => Array
        (
            [hashtag] => a7e87329b5eab8578f4f1098a152d6f4
            [title] => Flower
            [order] => 3
        )

    [1] => Array
        (
            [hashtag] => b24ce0cd392a5b0b8dedc66c25213594
            [title] => Free
            [order] => 2
        )

    [2] => Array
        (
            [hashtag] => e7d31fc0602fb2ede144d18cdffd816b
            [title] => Ready
            [order] => 1
        )
)

جرب usort : إذا كنت لا تزال على PHP 5.2 أو أقدم ، سيكون عليك تحديد وظيفة الفرز أولاً:

function sortByOrder($a, $b) {
    return $a['order'] - $b['order'];
}

usort($myArray, 'sortByOrder');

بدءًا من PHP 5.3 ، يمكنك استخدام وظيفة مجهولة:

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

وأخيرًا باستخدام PHP 7 ، يمكنك استخدام "مشغل سفينة الفضاء":

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

لتمديد هذا إلى فرز متعدد الأبعاد ، قم بالرجوع إلى عناصر الفرز الثانية / الثالثة إذا كان الأول هو صفر - أفضل موضح أدناه. يمكنك أيضًا استخدام هذا للفرز على العناصر الفرعية.

usort($myArray, function($a, $b) {
    $retval = $a['order'] <=> $b['order'];
    if ($retval == 0) {
        $retval = $a['suborder'] <=> $b['suborder'];
        if ($retval == 0) {
            $retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder'];
        }
    }
    return $retval;
});

إذا كنت بحاجة إلى الاحتفاظ بالارتباطات الرئيسية ، فاستخدم uasort() - انظر مقارنة وظائف تصنيف الصفيف في الدليل


أنا استخدم هذه الوظيفة:

function array_sort_by_column(&$arr, $col, $dir = SORT_ASC) {
    $sort_col = array();
    foreach ($arr as $key=> $row) {
        $sort_col[$key] = $row[$col];
    }

    array_multisort($sort_col, $dir, $arr);
}


array_sort_by_column($array, 'order');

أنا عادة ما استخدم usort ، وتمرير وظيفة المقارنة الخاصة بي. في هذه الحالة ، الأمر بسيط للغاية:

function compareOrder($a, $b)
{
  return $a['order'] - $b['order'];
}
usort($array, 'compareOrder');

لفرز الصفيف بقيمة استخدام مفتاح "العنوان":

uasort($myArray, function($a, $b) {
    return strcmp($a['title'], $b['title']);
});

مقارنة strcmp السلاسل.

يحافظ uasort () على مفاتيح الصفيف كما تم تعريفها.


$sort = array();
$array_lowercase = array_map('strtolower', $array_to_be_sorted);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $alphabetically_ordered_array);

هذا يعتني الأبجديات على حد سواء العلوي والسفلي.


  // our initial array  
   $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");  
  print_r($arr);

  // remove the elements who's values are yellow or red  
   $arr = array_diff($arr, array("yellow", "red"));
  print_r($arr);  

هذا هو الناتج من الكود أعلاه:

Array
(
    [0] => blue
    [1] => green
    [2] => red
    [3] => yellow
    [4] => green
    [5] => orange
    [6] => yellow
    [7] => indigo
    [8] => red
)

Array
(
    [0] => blue
    [1] => green
    [4] => green
    [5] => orange
    [7] => indigo
)

الآن ، سيقوم array_values ​​() بإعادة فهرسة المصفوفة الرقمية بشكل رائع ، ولكنه سيزيل كل السلاسل الرئيسية من الصفيف ويستبدلها بالأرقام. إذا كنت بحاجة إلى الحفاظ على أسماء المفاتيح (السلاسل) ، أو إعادة فهرسة المصفوفة إذا كانت جميع المفاتيح رقمية ، استخدم array_merge ():

$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);

المخرجات

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)




php arrays sorting multidimensional-array