/** * Sorts an array by any value, determined by a Set-compatible path * * @param array $data * @param string $path A Set-compatible path to the array value * @param string $dir asc/desc * @return array * @static */ function sort($data, $path, $dir) { $result = Set::__flatten(Set::extract($data, $path)); list($keys, $values) = array(Set::extract($result, '{n}.id'), Set::extract($result, '{n}.value')); $dir = strtolower($dir); if ($dir === 'asc') { $dir = SORT_ASC; } elseif ($dir === 'desc') { $dir = SORT_DESC; } array_multisort($values, $dir, $keys, $dir); $sorted = array(); $keys = array_unique($keys); foreach ($keys as $k) { $sorted[] = $data[$k]; } return $sorted; }
/** * Sorts an array by any value, determined by a Set-compatible path * * @param array $data An array of data to sort * @param string $path A Set-compatible path to the array value * @param string $dir Direction of sorting - either ascending (ASC), or descending (DESC) * @return array Sorted array of data */ public static function sort($data, $path, $dir) { $originalKeys = array_keys($data); if (is_numeric(implode('', $originalKeys))) { $data = array_values($data); } $result = Set::__flatten(Set::extract($data, $path)); list($keys, $values) = array(Set::extract($result, '{n}.id'), Set::extract($result, '{n}.value')); $dir = strtolower($dir); if ($dir === 'asc') { $dir = SORT_ASC; } elseif ($dir === 'desc') { $dir = SORT_DESC; } array_multisort($values, $dir, $keys, $dir); $sorted = array(); $keys = array_unique($keys); foreach ($keys as $k) { $sorted[] = $data[$k]; } return $sorted; }