| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- /**
- * The Horde_Array:: class provides various methods for array manipulation.
- *
- * Copyright 2003-2013 Horde LLC (http://www.horde.org/)
- *
- * See the enclosed file COPYING for license information (LGPL). If you
- * did not receive this file, see http://www.horde.org/licenses/lgpl21.
- *
- * @author Michael Slusarz <slusarz@horde.org>
- * @author Marko Djukic <marko@oblo.com>
- * @author Jan Schneider <jan@horde.org>
- * @category Horde
- * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
- * @package Util
- */
- class Horde_Array
- {
- /**
- * Sorts an array on a specified key. If the key does not exist,
- * defaults to the first key of the array.
- *
- * @param array &$array The array to be sorted, passed by reference.
- * @param string $key The key by which to sort. If not specified then
- * the first key is used.
- * @param integer $dir Sort direction:
- * 0 = ascending (default)
- * 1 = descending
- * @param boolean $assoc Keep key value association?
- */
- static public function arraySort(array &$array, $key = null, $dir = 0,
- $assoc = true)
- {
- /* Return if the array is empty. */
- if (empty($array)) {
- return;
- }
- /* If no key to sort by is specified, use the first key of the
- * first element. */
- if (is_null($key)) {
- $keys = array_keys(reset($array));
- $key = array_shift($keys);
- }
- /* Call the appropriate sort function. */
- $helper = new Horde_Array_Sort_Helper();
- $helper->key = $key;
- $function = $dir ? 'reverseCompare' : 'compare';
- if ($assoc) {
- uasort($array, array($helper, $function));
- } else {
- usort($array, array($helper, $function));
- }
- }
- /**
- * Given an HTML type array field "example[key1][key2][key3]" breaks up
- * the keys so that they could be used to reference a regular PHP array.
- *
- * @param string $field The field name to be examined.
- * @param string &$base Will be set to the base element.
- * @param array &$keys Will be set to the list of keys.
- *
- * @return boolean True on sucess, false on error.
- */
- static public function getArrayParts($field, &$base, &$keys)
- {
- if (!preg_match('|([^\[]*)((\[[^\[\]]*\])+)|', $field, $matches)) {
- return false;
- }
- $base = $matches[1];
- $keys = explode('][', $matches[2]);
- $keys[0] = substr($keys[0], 1);
- $keys[count($keys) - 1] = substr($keys[count($keys) - 1], 0, strlen($keys[count($keys) - 1]) - 1);
- return true;
- }
- /**
- * Using an array of keys iterate through the array following the
- * keys to find the final key value. If a value is passed then set
- * that value.
- *
- * @param array &$array The array to be used.
- * @param array &$keys The key path to follow as an array.
- * @param array $value If set the target element will have this value set
- * to it.
- *
- * @return mixed The final value of the key path.
- */
- static public function getElement(&$array, array &$keys, $value = null)
- {
- if (count($keys)) {
- $key = array_shift($keys);
- return isset($array[$key])
- ? self::getElement($array[$key], $keys, $value)
- : false;
- }
- if (!is_null($value)) {
- $array = $value;
- }
- return $array;
- }
- /**
- * Returns a rectangle of a two-dimensional array.
- *
- * @param array $array The array to extract the rectangle from.
- * @param integer $row The start row of the rectangle.
- * @param integer $col The start column of the rectangle.
- * @param integer $height The height of the rectangle.
- * @param integer $width The width of the rectangle.
- *
- * @return array The extracted rectangle.
- */
- static public function getRectangle(array $array, $row, $col, $height,
- $width)
- {
- $rec = array();
- for ($y = $row; $y < $row + $height; $y++) {
- $rec[] = array_slice($array[$y], $col, $width);
- }
- return $rec;
- }
- /**
- * Given an array, returns an associative array with each element key
- * derived from its value.
- * For example:
- * array(0 => 'foo', 1 => 'bar')
- * would become:
- * array('foo' => 'foo', 'bar' => 'bar')
- *
- * @param array $array An array of values.
- *
- * @return array An array with keys the same as values.
- */
- static public function valuesToKeys(array $array)
- {
- return $array
- ? array_combine($array, $array)
- : array();
- }
- }
|