return $result;
}
+ /**
+ * Locale aware sort of array of arrays.
+ *
+ * Given an array like:
+ * $array = array(
+ * array('name' => 'bravo'),
+ * array('name' => 'charlie'),
+ * array('name' => 'alpha')
+ * );
+ *
+ * If you call:
+ * core_collator::asort_array_of_arrays_by_key($array, 'name')
+ *
+ * You will be returned $array sorted by the name key of the subarrays. e.g.
+ * $array = array(
+ * array('name' => 'alpha'),
+ * array('name' => 'bravo'),
+ * array('name' => 'charlie')
+ * );
+ *
+ * @param array $array An array of objects to sort (handled by reference)
+ * @param string $key The key to use for comparison
+ * @param int $sortflag One of
+ * core_collator::SORT_NUMERIC,
+ * core_collator::SORT_STRING,
+ * core_collator::SORT_NATURAL,
+ * core_collator::SORT_REGULAR
+ * optionally "|" core_collator::CASE_SENSITIVE
+ * @return bool True on success
+ */
+ public static function asort_array_of_arrays_by_key(array &$array, $key, $sortflag = core_collator::SORT_STRING) {
+ $original = $array;
+ foreach ($array as $initkey => $item) {
+ $array[$initkey] = $item[$key];
+ }
+ $result = self::asort($array, $sortflag);
+ self::restore_array($array, $original);
+ return $result;
+ }
+
/**
* Locale aware sorting, the key associations are kept, keys are sorted alphabetically.
*
$this->assertTrue($result);
}
+ /**
+ * Tests the sorting of an array of arrays by key.
+ */
+ public function test_asort_array_of_arrays_by_key() {
+ $array = array(
+ 'a' => array('name' => 'bravo'),
+ 'b' => array('name' => 'charlie'),
+ 'c' => array('name' => 'alpha')
+ );
+ $this->assertSame(array('a', 'b', 'c'), array_keys($array));
+ $this->assertTrue(core_collator::asort_array_of_arrays_by_key($array, 'name'));
+ $this->assertSame(array('c', 'a', 'b'), array_keys($array));
+
+ $array = array(
+ 'a' => array('name' => 'b'),
+ 'b' => array('name' => 1),
+ 'c' => array('name' => 0)
+ );
+ $this->assertSame(array('a', 'b', 'c'), array_keys($array));
+ $this->assertTrue(core_collator::asort_array_of_arrays_by_key($array, 'name'));
+ $this->assertSame(array('c', 'b', 'a'), array_keys($array));
+
+ $array = array(
+ 'a' => array('name' => 'áb'),
+ 'b' => array('name' => 'ab'),
+ 1 => array('name' => 'aa'),
+ 'd' => array('name' => 'cc'),
+ 0 => array('name' => 'Áb')
+ );
+ $this->assertSame(array('a', 'b', 1, 'd', 0), array_keys($array));
+ $this->assertTrue(core_collator::asort_array_of_arrays_by_key($array, 'name'));
+ $this->assertSame(array(1, 'b', 'a', 0, 'd'), array_keys($array));
+ $this->assertSame(array(
+ 1 => array('name' => 'aa'),
+ 'b' => array('name' => 'ab'),
+ 'a' => array('name' => 'áb'),
+ 0 => array('name' => 'Áb'),
+ 'd' => array('name' => 'cc')
+ ), $array);
+
+ }
+
/**
* Returns an array of sorted names.
* @param array $objects