2017-08-13 133 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; 
    } 
}