我在项目中使用了array_column()
,上传后发现只有PHP 5.5或更高版本支持此功能,我认为我使用的托管不支持PHP 5.5或以上版本。< / p>
所以我想知道是否有任何替代方法来修复此错误?
这就是我在项目中使用array_count
的方式:
array_count_values(array_column(json_decode(json_encode($queryResultArray), true), $idForBar));
这在我的本地xampp和wampp中工作正常,但在服务器上却存在问题。寻找任何替代功能或解决方案。
答案 0 :(得分:71)
如果您的PHP版本不支持,请添加您自己的函数array_column
:
<?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;
}
}
答案 1 :(得分:15)
如果因为PHP&lt; 5.5:
而没有array_map()
,您也可以使用array_column()
功能
示例:
$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及更高版本!
如果你有&lt; 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);
答案 2 :(得分:7)
你也可以使用array_column()的替代代码,只需在行下面粘贴并替换你的变量。
代码:
array_map(function($element){return $element['last_name'];}, $a);
答案 3 :(得分:4)
使用array_map()代替:
array_count_values(
array_map(
function($value) use ($idForBar) {
return $value[$idForBar];
},
json_decode(
json_encode($queryResultArray),
true
)
)
);
答案 4 :(得分:4)
您始终可以使用函数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;
}
}
答案 5 :(得分:2)
PHP版本official recommendation不支持{34}下的.mp4
;另请参阅&#34;部分:
» Recommended userland implementation for PHP lower than 5.5
他们的建议是另一种.mkv
方法,但代码实际上是从array_column库中提取的,并且比这个页面上的示例更加通用。