当前位置: 首页 > 知识库问答 >
问题:

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

唐元青
2023-03-14

好的,所以我查询DB并从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";       
}

我到底做错了什么?

共有3个答案

宰父霖
2023-03-14

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

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

)
范成周
2023-03-14

这是一个数组的数组。。。把它折叠起来,它就会工作了。这里有两个选项:如何在PHP中将多维数组“展平”为简单数组?

裴俊豪
2023-03-14

被数组中的数组搞糊涂了,我一开始没注意到。多亏了Zeth的指点,我通过添加以下内容将数组折叠成一个数组,从而实现了这一点:

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

然后:

if(in_array($ip,$r0)) {       
echo "gotcha";       
}
 类似资料:
  • 问题内容: 我有一个字符串数组,其中包含字符串列表。我想弄清楚此列表中是否有重复的条目。基本上,我有一个用户列表,应该没有重复的条目。 问题答案: 您可以将String数组添加到HashSet 这将为您提供唯一的String值。如有必要,将HashSet转换回数组

  • 问题是,我试图这么做,但我检查字符串长度的方法不起作用;我能做些什么来修复它?

  • 问题内容: 我需要找到表中的所有行,其中特定字段的字符串在两个或多个位置重复。 可以在MySQL语句中完成吗? 编辑 我需要获取每一行,而不仅仅是计数有多少重复项。我希望能够编辑这些字段。 问题答案: 是的,尝试这样的事情:

  • 问题内容: 好吧,假设我有一个用{“ tube”,“ are”,“fun”}填充的数组,然后我有一个JTextField,如果我键入其中一个命令来执行某项操作,或者如果输入的不是这样,则会显示一条消息,说“没有找到指令”。 我尝试查看Java文档,但是得到的只是我不想要的东西,例如问题和东西……所以,这是怎么做的?我知道有一个“数组中的”功能,但是我不能很好地将两者结合在一起。 谢谢。 这是我到目

  • 我的一个朋友问我关于他们的讲师作为练习给他们的一个编码挑战。我找到了一个解决办法。但我认为,对于一个简单的分类问题来说,这个解决方案太长了。所以,我想问一下,是否有更直接的方法来解决这个挑战。 具有函数third_greatest(),它接受一个字符串数组并返回第三大单词。因此,例如:如果数组是[“你好”、“世界”、“之前”、“中午”],则输出应该是“世界”,因为“之前”是六个字母长,“你好”和“

  • 问题内容: 我在C#中使用elasticsearch.net库,并尝试查询与指定过滤器匹配的对象。 我希望查询返回对象,其中对象的Names集合中至少存在来自过滤器的输入名称之一。 问题是此查询的结果总是使我命中0次,即使我确定数据库中确实存在与指定过滤器匹配的数据,我也想找出我的查询出了什么问题… 该模型: 过滤对象: 查询数据的方法: 我也尝试过以下查询,但都没有产生预期的结果: 适用于我的解