php - মান দ্বারা মাল্টি-মাত্রিক অ্যারে কিভাবে সাজান?




arrays sorting (6)

"শিরোনাম" কী ব্যবহারের মান অনুসারে অ্যারে সাজানোর জন্য:

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

strcmp স্ট্রিং তুলনা।

uasort () সংজ্ঞায়িত করা হয়েছে হিসাবে অ্যারে কী বজায় রাখে।

"অর্ডার" কী এর মান অনুসারে আমি কীভাবে এই অ্যারেটি বাছাই করতে পারি? মান বর্তমানে ক্রমবর্ধমান যদিও, তারা সবসময় হবে না।

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
        )
)

আমি এই ফাংশন ব্যবহার করুন:

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');

আসুন এটির মুখোমুখি হোন: php সঠিকভাবে প্রতিটি অ্যারের ক্রম দৃশ্যকল্প হ্যান্ডেল করার জন্য বক্স ফাংশনের একটি সহজ আউট নেই।

এই রুটিন স্বজ্ঞাত, যা দ্রুত ডিবাগিং এবং রক্ষণাবেক্ষণ মানে:

// automatic population of array
$tempArray = array();
$annotations = array();
// ... some code
// SQL $sql retrieves result array $result 
// $row[0] is the ID, but is populated out of order (comes from 
// multiple selects populating various dimensions for the same DATE 
// for example
while($row = mysql_fetch_array($result)) {
    $needle = $row[0];
    arrayIndexes($needle);  // create a parallel array with IDs only
    $annotations[$needle]['someDimension'] = $row[1]; // whatever
}
asort($tempArray);
foreach ($tempArray as $arrayKey) {
    $dataInOrder = $annotations[$arrayKey]['someDimension']; 
    // .... more code
}

function arrayIndexes ($needle) {
    global $tempArray;
    if (!in_array($needle,$tempArray)) {
        array_push($tempArray,$needle);
    }
}

এই অর্জন করার এক পদ্ধতির এই মত হবে

    $new = [
              [
                'hashtag' => 'a7e87329b5eab8578f4f1098a152d6f4',
                'title' => 'Flower',
                'order' => 3,
              ],

              [
                'hashtag' => 'b24ce0cd392a5b0b8dedc66c25213594',
                'title' => 'Free',
                'order' => 2,
              ],

              [
                'hashtag' => 'e7d31fc0602fb2ede144d18cdffd816b',
                'title' => 'Ready',
                'order' => 1,
              ],
    ];

    $keys = array_column($new, 'order');

    $result = array_multisort($keys, SORT_ASC, $new);

ফলাফল:

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

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

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

    )

সবচেয়ে নমনীয় পদ্ধতি এই পদ্ধতি ব্যবহার করা হবে

Arr::sortByKeys(array $array, $keys, bool $assoc = true): array

কারণটা এখানে:

  • আপনি যেকোন কী দ্বারা 'key1.key2.key3' পারেন ( 'key1.key2.key3' বা ['k1', 'k2', 'k3'] )

  • অ্যাসোসিয়েটেভ এবং সহযোগী অ্যারে উভয় কাজ করে ( $assoc পতাকা)

  • এটি রেফারেন্স ব্যবহার করে না - নতুন সাজানো অ্যারে ফিরে

আপনার ক্ষেত্রে এটি হিসাবে সহজ হবে:

$sortedArray = Arr::sortByKeys($array, 'order');

এই পদ্ধতি এই লাইব্রেরি একটি অংশ।


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");




multidimensional-array