替换为array_column()

Siz*_*ode 29 php arrays

array_column()在一个项目中使用过,上传后我发现只有PHP 5.5或更高版本支持这个功能,我认为我使用的托管不支持PHP 5.5或更高版本.

所以我想知道是否有任何替代方法来修复此错误?

这就是我array_count在我的项目中使用的方式:

array_count_values(array_column(json_decode(json_encode($queryResultArray), true), $idForBar));
Run Code Online (Sandbox Code Playgroud)

这在我的本地xampp和wampp中工作正常,但在服务器上它给出了问题.寻找任何替代功能或解决方案.

Pup*_*pil 78

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

参考:

  • 您的实现与Ben Ramsey的https://github.com/ramsey/array_column/blob/master/src/array_column.php之间的区别是什么? (8认同)
  • 如果需要支持对象,可以使用:https://www.php.net/manual/en/function.array-column.php#119754 (2认同)

Leg*_*nar 20

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');
Run Code Online (Sandbox Code Playgroud)

变为:

array_map(function($element) {
  return $element['last_name'];
}, $a);
Run Code Online (Sandbox Code Playgroud)

所以你的情况是代码:

array_count_values(
  array_map(function($arr) use ($idForBar) {
    return $arr[$idForBar];
  }, $queryResultArray)
);
Run Code Online (Sandbox Code Playgroud)

以上是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;
    }           
}
Run Code Online (Sandbox Code Playgroud)

用法:

$output = get_field_data($queryResultArray, $idForBar);
Run Code Online (Sandbox Code Playgroud)

  • @AlmaDo么?在这种情况下,它是唯一*需要的*. (6认同)

Cod*_*ers 7

您还可以使用array_column()的替代代码,只需粘贴到行下方并替换您的变量即可.

码:

array_map(function($element){return $element['last_name'];}, $a);
Run Code Online (Sandbox Code Playgroud)