繁体   English   中英

PHP strpos 数组

[英]PHP strpos array

我试图遍历一个包含来自抓取网页的 html 的字符串。 首先,我希望返回包含“result”一词的所有链接,然后我想组织包含“base”、“second”、“third”或“latest”四种情况之一的所有链接,并创建一个流体大批。

下面是我想出的但它返回“警告: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) !== false){
                $keyArray[] = $element->href;
            }
        }
    }
    echo "<pre>" . print_r($keyArray) . "</pre> ";

您不能将数组用作strpos的针。 更改第二if到:

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

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;
}

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

$key = 'results';
$reportKey = ['base', 'second', 'third', 'latest'];
$keyArray = [];

foreach($html->find('a') as $element) {
    if (false !== strpos($element->href, $key)) {

        // I changed the condition here
        $pos = array_map(fn($k) => strpos($element->href, $k) !== false, $reportKey);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM