Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数组中查找字符串_Php_Arrays - Fatal编程技术网

Php 在数组中查找字符串

Php 在数组中查找字符串,php,arrays,Php,Arrays,好的,我正在查询数据库并从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地址列表生成一个数组:

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

我做错了什么?

这是一个数组数组。。。把它折叠起来,它就会工作了。这里有几个选项:

这是一个数组数组。。。把它折叠起来,它就会工作了。这里有几个选项:

对于这种情况,最灵活的方法是使用用户定义的比较函数:

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

对于此类情况,最灵活的方法是使用用户定义的比较函数:

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

被数组中的数组搞糊涂了,我一开始没注意到。 多亏了Zeth的指针,我通过添加以下内容将数组折叠成一个数组,从而使其正常工作:

$r0 = array_column($r, 'ip');
然后:

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

被数组中的数组搞糊涂了,我一开始没注意到。 多亏了Zeth的指针,我通过添加以下内容将数组折叠成一个数组,从而使其正常工作:

$r0 = array_column($r, 'ip');
然后:

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

你的阵列条件是错误的

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

你的阵列条件是错误的

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

您可以使用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;
    }
}

您可以使用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;
    }
}

这是一个数组中的一个数组。。。把它折叠起来,它就会工作了。这里有几个选项:它是一个数组中的一个数组。。。把它折叠起来,它就会工作了。这里有几个选项: