PHP strpos 数组
PHP strpos array
我正在尝试循环遍历包含来自已抓取网页的 html 的字符串。首先,我查看 return 所有包含单词 "result" 的链接,然后我想组织包含以下四种情况之一的所有链接,"base"、"second"、"third" 或 "latest" 并创建流体阵列。
下面是我想出的,但是 returns "Warning: strpos(): needle is not a string or an integer"。我似乎无法让数组案例工作。
如有任何帮助,我们将不胜感激。谢谢
$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()
不允许多针,可以这样做:
$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;
}
在strpos
中不能用数组作为针。将第二个 if
更改为:
if (str_replace($reportKey, "", $element->href) === $element->href) {
$keyArray[] = $element->href;
}
使用array_map()
and 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
将是一个包含 booleans 的数组,基于 $element->href
和 $reportKey
项之间的匹配。
然后我们检查 in_array()
是否至少匹配一次。
我正在尝试循环遍历包含来自已抓取网页的 html 的字符串。首先,我查看 return 所有包含单词 "result" 的链接,然后我想组织包含以下四种情况之一的所有链接,"base"、"second"、"third" 或 "latest" 并创建流体阵列。
下面是我想出的,但是 returns "Warning: strpos(): needle is not a string or an integer"。我似乎无法让数组案例工作。
如有任何帮助,我们将不胜感激。谢谢
$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()
不允许多针,可以这样做:
$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;
}
在strpos
中不能用数组作为针。将第二个 if
更改为:
if (str_replace($reportKey, "", $element->href) === $element->href) {
$keyArray[] = $element->href;
}
使用array_map()
and 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
将是一个包含 booleans 的数组,基于 $element->href
和 $reportKey
项之间的匹配。
然后我们检查 in_array()
是否至少匹配一次。