在数组中查找字符串[重复]

Posted

技术标签:

【中文标题】在数组中查找字符串[重复]【英文标题】:Finding string in array [duplicate] 【发布时间】:2018-01-21 08:21:05 【问题描述】:

好的,所以我正在查询数据库并从 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";       

我在这里做错了什么?

【问题讨论】:

它是一个数组的数组...折叠这个东西,然后它就可以工作了。这里有几个选项:***.com/questions/526556/… 【参考方案1】:

这是一个数组数组...折叠这个东西,然后它就可以工作了。这里有几个选项:How to "flatten" a multi-dimensional array to simple one in php?

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

您的数组条件错误。

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



【讨论】:

【参考方案4】:

对数组内容中的数组感到困惑,我一开始没有注意到。 感谢 Zeth 的指示,我通过添加以下内容将数组合并为一个来使其工作:

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

然后:

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

【讨论】:

【参考方案5】:

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

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

)

【讨论】:

以上是关于在数组中查找字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

查找字符串中存在哪个数组元素[重复]

查找数组中是不是存在字符串[重复]

查找Ruby数组的字符串索引[重复]

在数组中查找重复的条目

在Javascript中的对象数组中查找值[重复]

如果数组值包含字符串,则从 List<string> 中查找值 [重复]