2016-07-12 36 views
1

我正在檢查數組中的每一個可能的東西,看它是否包含指定數據中的東西。PHP Array,然後檢查數據是否在

陣:

$dogs = [ 
    "terrier" => "Terrier", 
    "german_shepard" => "GS", 
]; 

代碼:

if ($stmt->execute()){ 
    while ($request = $stmt->fetch(PDO::FETCH_ASSOC)){ 
     foreach($dogs as $x => $x_value){ 
      if (strpos($request['Data'], $x) !== false) { // This bit!! 
       $dog = $x_value; 
      } else { 
       $dog = 'Unknown dog'; 
      } 
     } 
    } 
} 

然後我有一個列表,它可以檢測列表中的細第一位的,但其他人只是稱之爲「未知狗EG:

1 - 梗

2 - 未知待辦事項摹

3 - 未知狗

我希望它看起來像:

1 - 梗

2 - GS

3 - GS

我想要列表到ap梨找到每個值。

+0

你可以通過var_dump或print_r $請求來查看你所得到的結果。顯示我們會幫助我們幫助你... – nerdlyist

+1

我的第一個想法是:你在數據庫中有'german_shepard'嗎? – FirstOne

+0

目前尚不清楚。數據庫中存儲的值是什麼?基於你願意打印這些列表的是什麼邏輯? –

回答

2

要覆蓋$dog變量它會檢查$dogs每個項目,所以如果有什麼不,做比賽前一後配合,它會將其設置回'Unknown dog'。您應該在循環之前將$dog設置爲默認值,並且只有在找到它時才覆蓋它。

$dog = 'Unknown dog'; 
foreach($dogs as $x => $x_value){ 
    if (strpos($request['Data'], $x) !== false) { // This bit!! 
     $dog = $x_value; 
    } 
} 

可能有$dogs多於一個值,該值相匹配的一個$request['Data']特定實例。如果您使用此代碼,$dog將設置爲最後值從$dogs匹配$request['Data']。如果您希望將其設置爲的第一個匹配值,則在$dog = $x_value之後添加break;;如果你想要的不是第一個或最後一個,它需要比這更復雜。

+0

附註:嘗試打破兩個循環,以防止不必要的迭代。 +1 – FirstOne

+0

該死的抱歉,你是對的。我正在做一個休息的答案,然後意識到這是什麼... – nerdlyist

+0

@FirstOne我在這裏添加了一些如何使用break的解釋。 –

-1

您可以使用PHP的本地in_array功能:

$dog = 'Unknown dog'; 
$key = in_array(strtolower($request['Data']), $dogs); 
if($key >= 0){ 
    $dog = $dogs[$key]; 
} 
+0

有一個_case-insensitive_'strpos':[** stripos **](http://php.net/manual/en/function.stripos.php)。 – FirstOne

+0

btw ..不是我的downvote – FirstOne

相關問題