【问题标题】:Match a string in an array strpos(): Empty needle匹配数组strpos()中的字符串:空针
【发布时间】:2016-08-19 11:47:16
【问题描述】:

我有一个来自数据库的字符串,我想与一个数组匹配,但它导致错误提示:

strpos(): X 行空针

if (!isset($_SESSION['arry'])) {
    $_SESSION['arry'] = array();
}
$imp = 42;
$arrys =  $_SESSION['arry'];

foreach($arrys as $string)
{
  if(strpos($imp, $string) !== false) 
  {
    $pow =1;
    break;
  }
}

if($pow==1){ exit; }

数组如下所示:

Array
(
    [0] => 218
    [1] => 219
    [2] =>  218
    [3] => 220
    [4] => 222
    [5] =>  42
    [6] => 223
)

【问题讨论】:

  • 交换你的论点,即strpos($string, $imp)
  • @RobbieAverill 现在它不搜索值

标签: php arrays session strpos


【解决方案1】:

只需在数组中搜索$imp,无需循环:

$imp = 42;
$arrys =  $_SESSION['arry'];

if(in_array($imp, $arrys)) {
    $pow = 1;
}

不清楚数组元素中是否有空格,所以你可能需要trim()他们:

in_array($imp, array_map('trim', $arrys))

此外,使用 strpos() 您会得到误报。如果$imp = 42 将匹配422142999942777 等。

【讨论】:

  • 那如何避免呢?
  • 您使用合适的工具来完成这项工作 (in_array)。或者像你一样循环使用if($imp == $string)if($imp == trim($string))
  • if(in_array 正在为另一个它显示的第一个 $imp 值工作,但该值在会话中不存在
【解决方案2】:

你正在做相反的方式,在 42 中搜索字符串,而不是去

strpos($string, $imp)

试试这个:(更新)

<?php

    $_SESSION['arry'] = array(236,235,239,243,246);

$imp =  239;
$arrys =  $_SESSION['arry'];
$arrys = array_unique($arrys);
$pow = "";
print "<pre>";
print_r($arrys);
print "</pre>";
foreach($arrys as $string)
{
if($string == $imp)  {
    $pow = 1; echo "we have".$imp."in array<br/>";
}
else{
    $pow = 0; echo "sorry".$imp."wasn't found in array<br/>";
}
}
?>

【讨论】:

  • @SagarSingh 它在引擎盖下做所有循环。它将遍历所有数组对象以查找是否有任何匹配值分配给 $imp
  • 当 $imp 的值为 42 时,它表示在会话中未找到值,这是完全正确的,但是当值为 300 时,它表示找到了值,当我回显该值时,会话中没有 300 值数组
  • @SagarSingh 是的,因为它按字母匹配,所以 30 、 300 、 3000 以及所有这些都会匹配,所以最好使用 foreach。
  • @SagarSingh 很高兴听到我帮助了你,更新了一点。
  • 还是同样的问题,我第一次通过 ajax 发送 $imp 值,第二次不工作
猜你喜欢
  • 2011-02-01
  • 2022-10-14
  • 2016-01-15
  • 2013-09-16
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多