Альтернатива array_column ()

Это все еще большая проблема в JSF. Fo, если у вас есть метод isPermittedToBlaBla для проверок безопасности, и в вашем представлении у вас есть rendered="#{bean.isPermittedToBlaBla}, тогда метод будет вызываться несколько раз.

Проверка безопасности может быть сложной, например. LDAP-запрос и т. Д. Поэтому вы должны избегать этого с помощью

Boolean isAllowed = null ... if(isAllowed==null){...} return isAllowed?

, и вы должны убедиться в этом в каждом сеансе.

Ich думаю, что JSF должен реализовать здесь некоторые расширения, чтобы избежать множественных вызовы (например, аннотация @Phase(RENDER_RESPONSE) вычисляет этот метод только один раз после фазы RENDER_RESPONSE ...)

29
задан Pupil 25 February 2016 в 09:14
поделиться

6 ответов

Добавьте свою собственную функцию 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;
    }
}

Ссылка:

73
ответ дан Nikita 25 February 2016 в 09:14
поделиться

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

код:

array_map(function($element){return $element['last_name'];}, $a);
7
ответ дан halfer 25 February 2016 в 09:14
поделиться

Используя вместо этого array_map () , что-то вроде:

array_count_values(
    array_map(
        function($value) use ($idForBar) {
            return $value[$idForBar];
        },
        json_decode(
            json_encode($queryResultArray),
            true
        )
    )
);
4
ответ дан Mark Baker 25 February 2016 в 09:14
поделиться

Вы также можете использовать функцию 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) {
    

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

Пример:

[110]

Стать:

[111]

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

[112]

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

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

[113]

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

$output = get_field_data($queryResultArray, $idForBar);
out = array(); if (is_array($array)) { if ($idField == null) { foreach ($array as $value) {

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

Пример:

[110]

Стать:

[111]

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

[112]

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

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

[113]

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

$output = get_field_data($queryResultArray, $idForBar);
out[] = $value[$field]; } } else { foreach ($array as $value) {

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

Пример:

[110]

Стать:

[111]

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

[112]

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

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

[113]

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

$output = get_field_data($queryResultArray, $idForBar);
out[$value[$idField]] = $value[$field]; } } return

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

Пример:

[110]

Стать:

[111]

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

[112]

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

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

[113]

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

$output = get_field_data($queryResultArray, $idForBar);
out; } else { return false; } }

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

$output = get_field_data($queryResultArray, $idForBar);
16
ответ дан Legionar 25 February 2016 в 09:14
поделиться

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

»Рекомендуемая реализация пользовательского пространства для PHP ниже, чем 5,5

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

2
ответ дан doub1ejack 25 February 2016 в 09:14
поделиться

Вы всегда можете использовать другую реализацию функции 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;
    }
}
4
ответ дан Wajeel 25 February 2016 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: