public function testSortBy_Called_OriginalDictionaryModified() { $d = Dictionary::fromArray([1, 3, 4, 0]); $originalValues = $d->values(); $d->sortBy('values', 'asc'); $this->assertNotEquals($originalValues, $d->values()); }
public static function sortBy($array, $callback, $direction = 'ASC') { if (!is_callable($callback)) { throw new \Twig_Error_Runtime(sprintf('Second argument of "sort_by" must be callable, but is "%s".', gettype($callback))); } if (!is_array($array) && !$array instanceof \Traversable) { throw new \Twig_Error_Runtime(sprintf('First argument of "sort_by" must be array or Traversable, but is "%s".', gettype($array))); } if ($array instanceof \Traversable) { if ($array instanceof Dictionary) { $array = $array->getCopy(); } else { $array = Dictionary::fromArray($array); } return $array->sortBy($callback, $direction); } else { $direction = strtoupper($direction) === 'DESC' ? SORT_DESC : SORT_ASC; $order = self::map($array, $callback); array_multisort($order, $direction, SORT_REGULAR, $array); return $array; } }