diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index e5a532d3bfecb766e59d6b4f00486aa23afb0766..8a0387626da048e67b1c8fb217b7a34fa8584a72 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -3390,3 +3390,115 @@ function avertir_auteurs($nom, $message, $statut = '') { $alertes[$statut][$nom] = $message; ecrire_meta("message_alertes_auteurs", serialize($alertes)); } + +if (PHP_VERSION_ID < 50500) { + if (!function_exists('array_column')) { + /** + * Returns the values from a single column of the input array, identified by + * the $columnKey. + * + * Optionally, you may provide an $indexKey to index the values in the returned + * array by the values from the $indexKey column in the input array. + * + * @link http://php.net/manual/fr/function.array-column.php + * @link https://github.com/ramsey/array_column/blob/master/src/array_column.php + * @copyright Copyright (c) Ben Ramsey (http://benramsey.com) + * @license http://opensource.org/licenses/MIT MIT + * + * @param array $input A multi-dimensional array (record set) from which to pull + * a column of values. + * @param mixed $columnKey The column of values to return. This value may be the + * integer key of the column you wish to retrieve, or it + * may be the string key name for an associative array. + * @param mixed $indexKey (Optional.) The column to use as the index/keys for + * the returned array. This value may be the integer key + * of the column, or it may be the string key name. + * @return array + */ + function array_column($input = null, $columnKey = null, $indexKey = null) + { + // Using func_get_args() in order to check for proper number of + // parameters and trigger errors exactly as the built-in array_column() + // does in PHP 5.5. + $argc = func_num_args(); + $params = func_get_args(); + + if ($argc < 2) { + trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING); + return null; + } + + if (!is_array($params[0])) { + trigger_error( + 'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given', + E_USER_WARNING + ); + return null; + } + + if (!is_int($params[1]) + && !is_float($params[1]) + && !is_string($params[1]) + && $params[1] !== null + && !(is_object($params[1]) && method_exists($params[1], '__toString')) + ) { + trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING); + return false; + } + + if (isset($params[2]) + && !is_int($params[2]) + && !is_float($params[2]) + && !is_string($params[2]) + && !(is_object($params[2]) && method_exists($params[2], '__toString')) + ) { + trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING); + return false; + } + + $paramsInput = $params[0]; + $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null; + + $paramsIndexKey = null; + if (isset($params[2])) { + if (is_float($params[2]) || is_int($params[2])) { + $paramsIndexKey = (int) $params[2]; + } else { + $paramsIndexKey = (string) $params[2]; + } + } + + $resultArray = array(); + + foreach ($paramsInput as $row) { + $key = $value = null; + $keySet = $valueSet = false; + + if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) { + $keySet = true; + $key = (string) $row[$paramsIndexKey]; + } + + if ($paramsColumnKey === null) { + $valueSet = true; + $value = $row; + } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) { + $valueSet = true; + $value = $row[$paramsColumnKey]; + } + + if ($valueSet) { + if ($keySet) { + $resultArray[$key] = $value; + } else { + $resultArray[] = $value; + } + } + + } + + return $resultArray; + } + + } +} \ No newline at end of file