2017-08-13 189 views
1

好了,所以我查詢數據庫和IP列表生成陣列地址:查找字符串

$q = 'SELECT ip FROM proxy'; 
$r = mysqli_fetch_all($con->query($q), MYSQLI_ASSOC); 

返回數組看起來像這樣:

Array 
(
    [0] => Array 
     (
      [ip] => 1.202.244.222 
     ) 

    [1] => Array 
     (
      [ip] => 1.226.238.136 
     ) 

    [2] => Array 
     (
      [ip] => 1.228.231.247 
     ) 

    [3] => Array 
     (
      [ip] => 1.238.106.137 
     ) 

    [4] => Array 
     (
      [ip] => 1.238.155.191 
     ) 

但是,如果我想找到說第一或在上面的列表中的任何IP,由於某種原因,未發現任何:

$ip = "1.202.244.222"; 
if(in_array($ip,$r)) {  
echo "gotcha";  
} 

什麼我做錯了,他回覆?

+0

它是一個數組的數組...摺疊的東西,然後它會工作。這裏有幾個選項:https://stackoverflow.com/questions/526556/how-to-flatten-a-multi-dimensional-array-to-simple-one-in-php – Zeth

回答

1

針對這種情況,最靈活的方法是使用一個用戶定義的比較函數:

<?php 
$needle = '1.202.244.222'; 
$haystack = [ 
    [ 
     'ip' => '1.202.244.222' 
    ], 
    [ 
     'ip' => '1.226.238.136' 
    ], 
    [ 
     'ip' => '1.228.231.247' 
    ], 
    [ 
     'ip' => '1.238.106.137' 
    ], 
    [ 
     'ip' => '1.238.155.191' 
    ] 
]; 

$result = array_filter($haystack, function($entry) use ($needle) { 
    return isset($entry['ip']) && $needle === $entry['ip']; 
}); 
print_r($result); 

以上代碼的輸出顯然是:

Array 
(
    [0] => Array 
     (
      [ip] => 1.202.244.222 
     ) 

) 
2

由陣列內的數組產生混淆,我一開始沒有注意到它。 由於Zeth的指針,我得到了它藉助壓縮陣列工作進入一個加:

$r0 = array_column($r, 'ip'); 

然後:

if(in_array($ip,$r0)) {  
echo "gotcha";  
} 
0

你的排列情況是錯誤的。

$ip_find = '1.202.244.222'; 
$ip_values = [ 
    [ 
     'ip' => '1.202.244.222' 
    ], 
    [ 
     'ip' => '1.226.238.136' 
    ], 
    [ 
     'ip' => '1.228.231.247' 
    ], 
    [ 
     'ip' => '1.238.106.137' 
    ], 
    [ 
     'ip' => '1.238.155.191' 
    ] 
]; 

foreach ($ip_values as $key => $value) { 
foreach ($value as $key => $ip) { 
if ($ip==$ip_find) { 
    echo $ip." Gocha"; 
    break; 
} 
} 
} 
0

可以使用的foreach做到這一點:

$r = [ 
    [ 
     'ip' => '1.202.244.222' 
    ], 
    [ 
     'ip' => '1.226.238.136' 
    ], 
    [ 
     'ip' => '1.228.231.247' 
    ], 
    [ 
     'ip' => '1.238.106.137' 
    ], 
    [ 
     'ip' => '1.238.155.191' 
    ] 
]; 

$ip = "1.202.244.222"; 

foreach($r as $elem) 
{ 
    if($elem['ip'] == $ip) 
    {  
     echo "gotcha"; 
     break; 
    } 
}