Search code examples
phparraysstrpos

PHP strpos array


I am trying to loop through a string that contains html from a scraped webpage. First I look to return all links that contain the word "result" and then I would like to organize all the links that contain one of four cases, "base", "second", "third" or "latest" and create a fluid array.

Below is what I have come up with but it returns "Warning: strpos(): needle is not a string or an integer". I cannot seem to get the array cases to work.

Any help would be greatly appreciated. Thank you

    $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> ";

Solution

  • strpos() does not allow more than one needle, you can do this:

    $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> ";
    

    You could also do your own function, this is only an example:

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