array_multisort() फंक्शन PHP में multidimensional arrays को multiple criteria द्वारा sort करने का सबसे शक्तिशाली तरीका है।
मूल उदाहरण
$events = [
['ID' => 1, 'title' => 'Event A', 'event_type' => 'conference', 'date' => '2024-03-15'],
['ID' => 2, 'title' => 'Event B', 'event_type' => 'workshop', 'date' => '2024-02-20'],
['ID' => 3, 'title' => 'Event C', 'event_type' => 'conference', 'date' => '2024-01-10'],
['ID' => 4, 'title' => 'Event D', 'event_type' => 'workshop', 'date' => '2024-04-05'],
];
// Sort columns तैयार करें
$sortByType = array_column($events, 'event_type');
$sortByDate = array_column($events, 'date');
$sortByTitle = array_column($events, 'title');
// Primary: event_type ASC, Secondary: date DESC, Tertiary: title ASC
array_multisort(
$sortByType, SORT_ASC, SORT_STRING,
$sortByDate, SORT_DESC, SORT_STRING,
$sortByTitle, SORT_ASC, SORT_STRING,
$events
);
print_r($events);
PHP 5.5+ शॉर्ट सिंटैक्स (array_column)
array_multisort(
array_column($events, 'event_type'), SORT_ASC,
array_column($events, 'date'), SORT_DESC,
array_column($events, 'title'), SORT_ASC,
$events
);
पुन: उपयोग योग्य फंक्शन
function sortMultiArray(array &$array, array $criteria): void {
$sortArrays = [];
foreach ($criteria as $key => $order) {
$sortArrays[] = array_column($array, $key);
$sortArrays[] = $order['direction'] ?? SORT_ASC;
$sortArrays[] = $order['type'] ?? SORT_REGULAR;
}
$sortArrays[] = &$array; // Reference to original array
array_multisort(...$sortArrays);
}
// उपयोग
$criteria = [
'event_type' => ['direction' => SORT_ASC, 'type' => SORT_STRING],
'date' => ['direction' => SORT_DESC, 'type' => SORT_STRING],
'title' => ['direction' => SORT_ASC, 'type' => SORT_STRING],
];
sortMultiArray($events, $criteria);
Sort Flags समझाया गया
| Flag | विवरण |
|---|---|
SORT_ASC | आरोही क्रम (डिफ़ॉल्ट) |
SORT_DESC | अवरोही क्रम |
SORT_REGULAR | सामान्य तुलना (डिफ़ॉल्ट) |
SORT_NUMERIC | संख्यात्मक तुलना |
SORT_STRING | स्ट्रिंग तुलना |
SORT_LOCALE_STRING | लोकेल-अवेयर स्ट्रिंग तुलना |
SORT_NATURAL | प्राकृतिक क्रम (PHP 5.4+) |
SORT_FLAG_CASE | केस-इनसेंसिटिव (SORT_STRING के साथ) |
उन्नत: Custom Comparison (PHP 7+)
usort($events, function($a, $b) {
// Primary: event_type
$cmp = strcmp($a['event_type'], $b['event_type']);
if ($cmp !== 0) return $cmp;
// Secondary: date (newest first)
$cmp = strcmp($b['date'], $a['date']);
if ($cmp !== 0) return $cmp;
// Tertiary: title
return strcmp($a['title'], $b['title']);
});
आउटपुट उदाहरण
Array
(
[0] => Array ( [ID] => 3 [title] => Event C [event_type] => conference [date] => 2024-01-10 )
[1] => Array ( [ID] => 1 [title] => Event A [event_type] => conference [date] => 2024-03-15 )
[2] => Array ( [ID] => 2 [title] => Event B [event_type] => workshop [date] => 2024-02-20 )
[3] => Array ( [ID] => 4 [title] => Event D [event_type] => workshop [date] => 2024-04-05 )
)