Альтернативный для array_column ()

Я использовал array_column() в проекте, и после загрузки я узнал, что только PHP 5.5 или выше поддерживает эту функцию, и я думаю, что используемый хостинг не поддерживает PHP 5.5 или выше.

Поэтому я хочу знать, есть ли альтернатива для исправления этой ошибки?

Вот как я использую array_count в моем проекте:

 array_count_values(array_column(json_decode(json_encode($queryResultArray), true), $idForBar)); 

Это отлично работает и в моем локальном xampp и wampp, но на сервере он дает проблемы. Просмотр любой альтернативной функции или решения.

Добавьте свою собственную функцию array_column если ваша версия PHP не поддерживает ее:

 <?php if (! function_exists('array_column')) { function array_column(array $input, $columnKey, $indexKey = null) { $array = array(); foreach ($input as $value) { if ( !array_key_exists($columnKey, $value)) { trigger_error("Key \"$columnKey\" does not exist in array"); return false; } if (is_null($indexKey)) { $array[] = $value[$columnKey]; } else { if ( !array_key_exists($indexKey, $value)) { trigger_error("Key \"$indexKey\" does not exist in array"); return false; } if ( ! is_scalar($value[$indexKey])) { trigger_error("Key \"$indexKey\" does not contain scalar value"); return false; } $array[$value[$indexKey]] = $value[$columnKey]; } } return $array; } } 

Справка:

Вы также можете использовать array_map() если у вас нет array_column() из-за PHP <5.5:

Пример:

 $a = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ) ); array_column($a, 'last_name'); 

становится:

 array_map(function($element) { return $element['last_name']; }, $a); 

Так что в вашем случае код будет:

 array_count_values( array_map(function($arr) use ($idForBar) { return $arr[$idForBar]; }, $queryResultArray) ); 

Это выше работает на PHP 5.3.0 и выше!

Если у вас есть <PHP 5.3.0, как вы написали PHP 5.2.17, просто используйте простую функцию:

 function get_field_data($array, $field, $idField = null) { $_out = array(); if (is_array($array)) { if ($idField == null) { foreach ($array as $value) { $_out[] = $value[$field]; } } else { foreach ($array as $value) { $_out[$value[$idField]] = $value[$field]; } } return $_out; } else { return false; } } 

И использование:

 $output = get_field_data($queryResultArray, $idForBar); 

Вы также можете использовать альтернативный код array_column (), просто просто вставьте ниже строки и замените переменную.

Код:

 array_map(function($element){return $element['last_name'];}, $a); 

Я надеюсь, что это поможет вам.

Вы всегда можете использовать другую реализацию функции array_column

 if (!function_exists('array_column')) { function array_column(array $array, $columnKey, $indexKey = null) { $result = array(); foreach ($array as $subArray) { if (!is_array($subArray)) { continue; } elseif (is_null($indexKey) && array_key_exists($columnKey, $subArray)) { $result[] = $subArray[$columnKey]; } elseif (array_key_exists($indexKey, $subArray)) { if (is_null($columnKey)) { $result[$subArray[$indexKey]] = $subArray; } elseif (array_key_exists($columnKey, $subArray)) { $result[$subArray[$indexKey]] = $subArray[$columnKey]; } } } return $result; } } 

Вместо этого используйте array_map () :

 array_count_values( array_map( function($value) use ($idForBar) { return $value[$idForBar]; }, json_decode( json_encode($queryResultArray), true ) ) ); 

Существует официальная рекомендация для версий PHP, которые не поддерживают array_colum() разделе «см. Также»:

»Рекомендуемая реализация userland для PHP ниже 5.5

Их рекомендация другая, if (!function_exists('array_column')) подход, но код фактически извлекается из библиотеки array_column и немного более обобщен, чем примеры на этой странице.