在数组中查找字符串[重复]
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
)
)
【讨论】:
以上是关于在数组中查找字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章