PHP strpos数组

时间:2018-06-28 12:22:20

标签: php arrays strpos

我正在尝试遍历包含已抓取网页中html的字符串。首先,我希望返回所有包含“结果”一词的链接,然后我想组织包含“基本”,“第二”,“第三”或“最新”四种情况之一的所有链接,并创建流畅的链接数组。

下面是我想出的,但返回“警告:strpos():needle不是字符串或整数”。我似乎无法使数组用例起作用。

任何帮助将不胜感激。谢谢

    $key = "results";
    $reportKey = array("base", "second", "third","latest");
    $keyArray = array();
    foreach($html->find('a') as $element){
        if (strpos($element->href, $key) !== false){
            if (strpos($element->href, $reportKey) !== false){
                $keyArray[] = $element->href;
            }
        }
    }
    echo "<pre>" . print_r($keyArray) . "</pre> ";

3 个答案:

答案 0 :(得分:4)

strpos中不能将数组用作指针。将第二个if更改为:

if (str_replace($reportKey, "", $element->href) === $element->href) {
    $keyArray[] = $element->href;
}

答案 1 :(得分:1)

strpos()不允许多于一根针,您可以这样做:

$key = "results";
$reportKey = array("base", "second", "third","latest");
$keyArray = array();

foreach($html->find('a') as $element)
{
    if (strpos($element->href, $key) !== false){
        if (
            strpos($element->href, $reportKey[0]) !== false
            || strpos($element->href, $reportKey[1]) !== false
            || strpos($element->href, $reportKey[2]) !== false
            || strpos($element->href, $reportKey[3]) !== false
         ){
             $keyArray[] = $element->href;
         }
     }
 }

 echo "<pre>" . print_r($keyArray) . "</pre> ";

您也可以执行自己的功能,这只是一个示例:

function multi_strpos($string, $check, $getResults = false)
{
$result = array();
  $check = (array) $check;

  foreach ($check as $s)
  {
    $pos = strpos($string, $s);

    if ($pos !== false)
    {
      if ($getResults)
      {
        $result[$s] = $pos;
      }
      else
      {
        return $pos;          
      }
    }
  }

  return empty($result) ? false : $result;
}

答案 2 :(得分:1)

使用array_map()in_array()的解决方案:

// Your initial code
$key = "results";
$reportKey = array("base", "second", "third","latest");
$keyArray = array();
foreach($html->find('a') as $element){
    if (strpos($element->href, $key) !== false){

        // I changed the condition here
        $pos = array_map(function ($k) {
            global $element;
            return strpos($element->href, $k) !== false;
        }, $reportKey);

        if (in_array(true, $pos)){
            $keyArray[] = $element->href;
        }

    }
}

$pos将是一个包含{strong>布尔值的数组,该数组基于$element->href$reportKey项之间的匹配。
然后我们用in_array()检查它是否至少匹配一次。