2017-08-13 15 views
1

Okay, so dass ich die DB-Abfrage und ein Array aus einer Liste von IP-Adressen zu erzeugen:Finding String in Array

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 
     ) 

Aber wenn ich:

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

Array sieht wie folgt zurück finden wollen, um das sagen erste oder jede IP in der obigen Liste, aus irgendeinem Grund hat es nicht für alles:

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

Was bin ich, dass er falsch machen Re?

+0

Es ist ein Array eines Arrays ... das Ding Collapse, und dann wird es funktionieren. Es gibt ein paar Optionen hier: https://stackoverflow.com/questions/526556/how-to-flatten-a-multi-dimensional-array-to-simple-one-in-php – Zeth

Antwort

1

Die flexibelste Ansatz für solche Situationen ist eine benutzerdefinierte Vergleichsfunktion zu verwenden:

<?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); 

Die Ausgabe des obigen Codes offensichtlich ist:

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

) 
2

Ich war verwirrt von dem Array in Array-Sachen, die ich zuerst nicht bemerkt habe. Dank Zeth der Zeiger, habe ich es durch Zugabe von kollabiert die Arrays in einem arbeiten:

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

Und dann:

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

Ihr Array Zustand war falsch.

$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

Sie können es foreach tun:

$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; 
    } 
}