2017-09-03 86 views
2

我有兩個數組需要完全按照相同的順序進行比較,我需要檢查類subAsubB中的每個數組是否包含前提條件中的值。如何使用in_array函數比較2個數組

我的先決條件陣列

Array 
(
    [s1] => MAT 
    [s2] => ENG 
    [s3] => PHY 
    [s4] => CHE 
    [s5] => FRE 
) 

和我的類陣列

Array 
(
    [subA] => MAT 
    [subB] => ENG 
) 
Array 
    (
    [subA] => ENG 
    [subB] => 
    ) 
Array 
    (
    [subA] => MAT 
    [subB] => PHY 
    ) 
Array 
    (
    [subA] => CHE 
    [subB] => 
    ) 
Array 
    (
    [subA] => MAT 
    [subB] => FRE 
    ) 

我的代碼

$prerequisite = array(
    's1' => 'MAT', 
    's2' => 'ENG', 
    's3' => 'PHY', 
    's4' => 'CHE', 
    's5' => 'FRE' 
); 

$confirmed = TRUE; 

$i = 0; 
foreach($prerequisite as $p) 
{      
    if(in_array($prerequisite, $classes[$i])) 
    { 
    // The prerequisite has been met 
    } 
    else 
    { 
    // The prerequisite has not been met 
    $confirmed = FALSE; 
    } 
    $i++; 
} 

if($confirmed == TRUE) { //run insert query here } 

預期輸出

我需要返回TRUE,如果所有的先決條件, 需要它來尋找例如:

  • 如果從類subAsubB比賽s1價值MAT第一陣列的前提陣列
  • 如果從類subAsubB匹配s2ENG從先決條件陣列
  • 秒陣列
  • 如果從類subAsubB匹配s3PHY從先決條件陣列
  • 第三陣列如果從類subAsubB匹配s4CHE第四陣列從先決條件陣列
  • 如果從類subAsubB匹配s5值第五陣列FRE來自前提陣列

問題

我總是越來越FALSE,而不是能夠運行您沒有使用$p插入查詢

+0

你可以把$你的代碼中的類數組? – z3nth10n

+0

@Ikillnukes我的類數組來自在此條件之前運行的查詢,這就是爲什麼我在我的問題中發佈類數組的輸出 – mirvatJ

回答

1

,你提供一個數組的指針參數in_array():http://php.net/manual/en/function.in-array.php

如果用$p替換in_array針,則會搜索$classes[$i]而不是整個數組。

你也似乎並不需要整塊,只是使用! (而不是)條件而不是檢查條件並使用else塊。

if(! in_array($p, $classes[$i])) 
{ 
    $confirmed = false; 
} 
0

這可能是一個可能重複:Checking to see if one array's elements are in another array in PHP

您應該使用array_intersect這種方法...

我會回答,因爲也有其他的事情,你還沒有清除。

$prerequisite = array(
    's1' => 'MAT', 
    's2' => 'ENG', 
    's3' => 'PHY', 
    's4' => 'CHE', 
    's5' => 'FRE' 
); 

$classes1 = array(
    "subA" => "MAT", 
    "subB" => "ENG" 
); 

$classes2 = array(
    "subA" => "ENG", 
    "subB" => "" 
); 

if(!empty(array_intersect($prerequisite, $classes1))) { 
    //run insert query here 
} 

你已經錯過了一些東西:

  • 已經使用$classes作爲數字陣列,而不是一個關聯一個
  • 您已在的foreach

錯過$p正如你所看到的,我創建從你告訴我,在查詢的陣列。

你可以看到這個工作here

1

這個問題提供了PHP函數array_map()一個美麗的用例:

$prerequisite = array(
    's1' => 'MAT', 
    's2' => 'ENG', 
    's3' => 'PHY', 
    's4' => 'CHE', 
    's5' => 'FRE' 
); 

$classes = array(
    array(
     'subA' => 'MAT', 
     'subB' => 'ENG', 
    ), 
    array(
     'subA' => 'ENG', 
     'subB' => NULL, 
    ), 
    array(
     'subA' => 'MAT', 
     'subB' => 'PHY', 
    ), 
    array(
     'subA' => 'CHEx',  // <---- doesn't match the prerequisite 
     'subB' => NULL, 
    ), 
    array(
     'subA' => 'MAT', 
     'subB' => 'FRE', 
    ), 
); 

// array_filter() removes the matching classes 
$missing = array_filter(
    array_map(
     function(array $class, $pre, $key) { 
      // Return $key when the values of both 'subA' and 'subB'... 
      // ... are different than the expected prerequisite 
      return ($class['subA'] !== $pre && $class['subB'] !== $pre) ? $key : NULL; 
     }, 
     $classes, 
     $prerequisite, 
     array_keys($prerequisite) 
    ) 
); 


// $missing associates the keys of $classes (numbers) to the keys of $prerequisite 
// ... for classes that do not match their prerequisite 
print_r($missing); 

輸出是:

Array 
(
    [3] => s4 
)