note 121037 deleted from function.usort by crell

From: Date: Thu, 31 Mar 2022 16:33:34 +0000
Subject: note 121037 deleted from function.usort by crell
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-217833@lists.php.net to get a copy of this message
Note Submitter: 121616591 at qq dot com ---- You can also sort multi-dimensional array for multiple values like as <?php $arr = array( array('id'=>1, 'age'=>1, 'sex'=>6, 'name'=>'a'), array('id'=>2, 'age'=>3, 'sex'=>1, 'name'=>'c'), array('id'=>3, 'age'=>3, 'sex'=>1, 'name'=>'b'), array('id'=>4, 'age'=>2, 'sex'=>1, 'name'=>'d'), ); print_r(arrayOrderBy($arr, 'age asc,sex asc,name desc')); function arrayOrderBy(array &$arr, $order = null) { if (is_null($order)) { return $arr; } $orders = explode(',', $order); usort($arr, function($a, $b) use($orders) { $result = array(); foreach ($orders as $value) { list($field, $sort) = array_map('trim', explode(' ', trim($value))); if (!(isset($a[$field]) && isset($b[$field]))) { continue; } if (strcasecmp($sort, 'desc') === 0) { $tmp = $a; $a = $b; $b = $tmp; } if (is_numeric($a[$field]) && is_numeric($b[$field]) ) { $result[] = $a[$field] - $b[$field]; } else { $result[] = strcmp($a[$field], $b[$field]); } } return implode('', $result); }); return $arr; } ?> output: Array ( [0] => Array ( [id] => 1 [age] => 1 [sex] => 6 [name] => a ) [1] => Array ( [id] => 4 [age] => 2 [sex] => 1 [name] => d ) [2] => Array ( [id] => 2 [age] => 3 [sex] => 1 [name] => c ) [3] => Array ( [id] => 3 [age] => 3 [sex] => 1 [name] => b ) )

« previous php.notes (#217833) next »