Это все еще большая проблема в JSF. Fo, если у вас есть метод isPermittedToBlaBla
для проверок безопасности, и в вашем представлении у вас есть rendered="#{bean.isPermittedToBlaBla}
, тогда метод будет вызываться несколько раз.
Проверка безопасности может быть сложной, например. LDAP-запрос и т. Д. Поэтому вы должны избегать этого с помощью
Boolean isAllowed = null ... if(isAllowed==null){...} return isAllowed?
, и вы должны убедиться в этом в каждом сеансе.
Ich думаю, что JSF должен реализовать здесь некоторые расширения, чтобы избежать множественных вызовы (например, аннотация @Phase(RENDER_RESPONSE)
вычисляет этот метод только один раз после фазы RENDER_RESPONSE
...)
Добавьте свою собственную функцию 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_column (), просто вставьте строку ниже и замените вашу переменную.
код:
array_map(function($element){return $element['last_name'];}, $a);
Используя вместо этого array_map () , что-то вроде:
array_count_values(
array_map(
function($value) use ($idForBar) {
return $value[$idForBar];
},
json_decode(
json_encode($queryResultArray),
true
)
)
);
Вы также можете использовать функцию 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);
Существует официальная рекомендация для версий PHP, которые не поддерживают array_colum()
в разделе «см. Также»:
»Рекомендуемая реализация пользовательского пространства для PHP ниже, чем 5,5
Их рекомендация является еще одним подходом if (!function_exists('array_column'))
, но код фактически извлечен из библиотеки array_column и немного более обобщен, чем примеры на этой странице.
Вы всегда можете использовать другую реализацию функции 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;
}
}