【问题标题】: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";       
}

我在这里做错了什么?

【问题讨论】:

标签: php arrays


【解决方案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
                  )
          
          )
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-06-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-08
            • 1970-01-01
            • 2020-05-17
            相关资源
            最近更新 更多