Я использовал 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 и немного более обобщен, чем примеры на этой странице.