2016-01-29 5 views
1

У меня есть два массива разных размеров, которые выглядят так: Array с именем $ form_types;Пересечение двух массивов с разным размером

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [form_type_id] => 1 
      [1] => Full name 
      [form_title] => Full name 
      [2] => text 
      [input_type] => text 
     ) 

    [1] => Array 
     (
      [0] => 2 
      [form_type_id] => 2 
      [1] => Birth date 
      [form_title] => Birth date 
      [2] => date 
      [input_type] => date 
     ) 

    [2] => Array 
     (
      [0] => 3 
      [form_type_id] => 3 
      [1] => Sex 
      [form_title] => Sex 
      [2] => text 
      [input_type] => text 
     ) 

    [3] => Array 
     (
      [0] => 4 
      [form_type_id] => 4 
      [1] => Address 
      [form_title] => Address 
      [2] => text 
      [input_type] => text 
     ) 

    [4] => Array 
     (
      [0] => 5 
      [form_type_id] => 5 
      [1] => City 
      [form_title] => City 
      [2] => select 
      [input_type] => select 
     ) 

И массив с именем $ _POST (массив значений 1 и 5 такие же, как form_type_id в $ form_types):

Array 
(
    [1] => John Smith 
    [5] => Chicago 
) 

мне нужно найти способ, пересекающиеся значения. В этом случае было бы:

Array 
(
    [1] => text 
    [5] => select 
) 

Я пробовал:

$arr_input_types = array_intersect($input_types, $_POST); 

но возвращать ноль.

И я также пытался:

$arr_input_types = array_intersect(array_column($input_types, 'form_type_id'), array_keys($_POST)); 

но возвращают только:

Array 
(
    [0] => 1 
    [4] => 5 
) 
+0

Что вы пробовали? Вы пытались использовать array_intersect? http://php.net/manual/en/function.array-intersect.php –

+0

Да: $ arr_input_types = array_intersect ($ input_types, $ _POST); но возвращать ноль. – SianiparD

+0

Можете ли вы показать нам, что вы пробовали? Весь код? –

ответ

1

То, что вы пытаетесь сделать это немного слишком сложным для одной из стандартных функций PHP массива. Однако вы можете легко сделать это с помощью некоторых петель:

//populate arrays 
$input_types[] = array (0 => 1, "form_type_id" => 1, 1 => "Full name", "form_title" => "Full name", 2 => "text" , "input_type" => "text"); 
$input_types[] = array (0 => 2, "form_type_id" => 2, 1 => "Birth date", "form_title" => "Birth date", 2 => "date" , "input_type" => "date"); 
$input_types[] = array (0 => 3, "form_type_id" => 3, 1 => "Sex", "form_title" => "Sex", 2 => "text" , "input_type" => "text"); 
$input_types[] = array (0 => 4, "form_type_id" => 4, 1 => "Address", "form_title" => "Address", 2 => "text" , "input_type" => "text"); 
$input_types[] = array (0 => 5, "form_type_id" => 5, 1 => "City", "form_title" => "City", 2 => "select" , "input_type" => "select"); 

$_POST[1] = 'John Smith'; 
$_POST[5] = 'Chicago'; 

//Loop over each entry to search for 
foreach (array_keys($_POST) as $key){ 
    //Loop to the input array 
    foreach ($input_types as $search){ 
     //If we find the right key, add it to the results array 
     if ($search['form_type_id'] == $key){ 
      $results[$key] = $search['input_type']; 
     } 
    } 
} 

print_r($results); 
0

Из ваших объяснений, кажется, что вы хотите, для каждого ключа X в $_POST массиве:

  1. найти член $form_types массив, в котором под-элемент имеет ключ = form_type_id' and value matching X`.
  2. затем в элементе, выбранном в # 1, найдите значение V его подчиника, имеющего ключ 2.
  3. в результирующем массиве, создайте элемент как X => V.

Если это так, попробуйте это:

foreach ($_POST as $key => $val) { 
    $look_for = NULL; 
    foreach ($form_types as $form_type) { 
    if ($form_type['form_type_id'] == $key) { 
     $look_for = $form_type[2]; 
     break; 
    } 
    } 
    $result[$key] = $look_for; // NULL if no match found 
} 
+0

К сожалению, результат: 'Массив ( [1] => [5] => )' – SianiparD

+0

@JoshGandosh К сожалению, произошла ошибка. Теперь отредактирован, протестирован. – cFreed

Смежные вопросы