#php #arrays
#php #массивы
Вопрос:
Я знаю, что это, вероятно, очень простой вопрос, но я посмотрел вокруг, и большинство ответов относятся к пересечениям массива, что не то, что я ищу.
Пример:
У меня есть массив ($ rows). При запуске print_r($rows)
я получаю:
Array (
[0] => Array (
[id] => 184
[0] => 184
[name] => Advantage Membership
[1] => Advantage Membership
[flag] => 4
[2] => 4
)
[1] => Array (
[id] => 238
[0] => 238
[programname] => Package 2
[1] => Package 2
[flag] => 5
[2] => 5
)
)
По сути, я хочу создать массив ‘sub’, который содержит все поля ‘flag’ в моем массиве $ rows, чтобы затем я мог выполнить оператор if (in_array()) с другим значением.
идеальный результирующий массив будет выглядеть следующим образом:
$array2 = array( '4', '5' )
Тогда я мог бы запустить следующее и быть счастливым:
if (in_array(4, $array2)) ...
Есть предложения?
Комментарии:
1. Выполните цикл над массивом и извлеките значения или используйте
array_map
.
Ответ №1:
Что не так с пользовательской функцией?
function in_sub_array($needle, $ary){
foreach ($ary as $a){
if (isset($a['flag']) amp;amp; $a['flag'] == $needle) // could use ===, too.
return true;
}
return false;
}
if (in_sub_arry(4,$array2)) ...
Или, как предлагали другие, array_map
является хорошей альтернативой.
function get_flags($ary){
return (isset($ary['flag']) ? $ary['flag'] : null);
}
if (in_array(4,array_map('get_flags',$array2))) ...
Комментарии:
1. = это хорошая функция, но в целом я думаю, что предложение Криса более краткое.
2. просто отметил ваше второе предложение — третичное предложение тоже хорошее
Ответ №2:
function flagit($n)
{
return $n['flag'];
}
$flags = array_map("flagit", $array);