-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Labels
Description
The following compat code was needed for pre-PHP 5.6 days, but this function is natively available in all the PHP versions we support.
Lines 3 to 118 in 279794b
| /** | |
| * Copied from https://github.com/ramsey/array_column | |
| * | |
| * For the full copyright and license information, please view the LICENSE | |
| * file that was distributed with this source code. | |
| * | |
| * @copyright Copyright (c) Ben Ramsey (https://benramsey.com) | |
| * @license https://opensource.org/licenses/MIT MIT | |
| * | |
| * @phpcs:disable -- Code from external source. Left as-is for easier compare. | |
| */ | |
| 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. | |
| * | |
| * @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 = []; | |
| 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; | |
| } | |
| } | |
| // phpcs:enable |
We can keep the php/compat.php file for other compat functions we might need in the future (e.g. PHP 8.0x ones), but this function can be removed.