Как я могу создать подраздел существующего массива с помощью PHP?

#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);