访问PHP数组中的子字符串

访问PHP数组中的子字符串,php,python,Php,Python,假设我有这样一个数组: $check="Ninja Turtles"; $key=array("jack and jil","peter likes pan","Ninja Turtles"); 我想知道$check变量中的关键字“Ninja Turtels”是否存在于数组中,如果存在,我想知道它存在于数组的哪个索引中。我上面的代码工作得非常好,但是如果我的$check变量有一些额外的单词,比如: $check="Ninja blah bleh Turtles" 那我的代码就不行了。我想忽略

假设我有这样一个数组:

$check="Ninja Turtles";
$key=array("jack and jil","peter likes pan","Ninja Turtles");
我想知道$check变量中的关键字“Ninja Turtels”是否存在于数组中,如果存在,我想知道它存在于数组的哪个索引中。我上面的代码工作得非常好,但是如果我的$check变量有一些额外的单词,比如:

$check="Ninja blah bleh Turtles"
那我的代码就不行了。我想忽略我字符串中的“废话”

我设法用Python解决了这个问题,因为我在Python方面有多年的经验,但我对php还是新手

我的代码 我的完整Python代码
像这样的东西应该可以帮助你开始。。。
类似的内容应该可以帮助您开始。。。

我没有使用数组进行匹配检查,而是使用preg_match进行相反的检查

输出:

$pattern = "/" . Str_replace(" ", "|", $val) ."/";

将“忍者神龟”炸成阵列,然后将它们重新组合在一起,中间有
|
(regex或)。
然后添加
/
以完成正则表达式模式。
检查此模式是否与$Check匹配。
如果为真,则返回键值

编辑;在洗碗的时候,我意识到$pattern可以这样做

$check = "Ninja bleh balah Turtles";
$key = ["jack and jil", "peter likes pan", "Ninja Turtles"];

foreach($key as $index => $name) {
    if ($name === $check) {
        echo "Found $name Index is $index";
        return;
    } else {
        $newKey = explode(' ', $name);
        $newPhase = explode(' ', $check);
        $num = 2;
        $l = array_filter($newKey, function ($nkey) use ($newPhase) {
            return in_array($nkey, $newPhase);
        });
        if (count($l) >= $num) {
            echo "Found $name Index is $index";
            return;
        }
    }
}

它只是用正则表达式替换空间,而不是爆炸和内爆。可能性能差别不大,但这是一种更正确的方法。

我使用preg\u match替代使用数组进行匹配检查

输出:

$pattern = "/" . Str_replace(" ", "|", $val) ."/";

将“忍者神龟”炸成阵列,然后将它们重新组合在一起,中间有
|
(regex或)。
然后添加
/
以完成正则表达式模式。
检查此模式是否与$Check匹配。
如果为真,则返回键值

编辑;在洗碗的时候,我意识到$pattern可以这样做

$check = "Ninja bleh balah Turtles";
$key = ["jack and jil", "peter likes pan", "Ninja Turtles"];

foreach($key as $index => $name) {
    if ($name === $check) {
        echo "Found $name Index is $index";
        return;
    } else {
        $newKey = explode(' ', $name);
        $newPhase = explode(' ', $check);
        $num = 2;
        $l = array_filter($newKey, function ($nkey) use ($newPhase) {
            return in_array($nkey, $newPhase);
        });
        if (count($l) >= $num) {
            echo "Found $name Index is $index";
            return;
        }
    }
}
它只是用正则表达式替换空间,而不是爆炸和内爆。可能性能差别不大,但这是更正确的方法。

类似的php代码是:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

foreach ($key as $k => $keyValue) {
    foreach (explode(' ', $check) as $valueCheck) {
        if (strstr($keyValue, $valueCheck)) {
            printf('[%s => %s]', $k, $keyValue);
            break;
        }
    }
}
类似的php代码是:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

foreach ($key as $k => $keyValue) {
    foreach (explode(' ', $check) as $valueCheck) {
        if (strstr($keyValue, $valueCheck)) {
            printf('[%s => %s]', $k, $keyValue);
            break;
        }
    }
}
尝试使用tis:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

$found = array_filter($key, function($value) use($check) {
    return array_filter(explode(' ', $check), function($valueKey) use($value) {
        return strstr($value, $valueKey);
    });
});

print_r($found);
结果:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

$pattern = '/' . str_replace(' ', '|', $check) . '/';
$foundbyRegex = preg_grep($pattern, $key);

print_r($foundbyRegex);
[2=>忍者神龟]

但是你可以用

结果:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

$pattern = '/' . str_replace(' ', '|', $check) . '/';
$foundbyRegex = preg_grep($pattern, $key);

print_r($foundbyRegex);
或使用和reg表达式:

Array
(
    [2] => Ninja Turtles
)
结果:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

$pattern = '/' . str_replace(' ', '|', $check) . '/';
$foundbyRegex = preg_grep($pattern, $key);

print_r($foundbyRegex);
尝试使用tis:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

$found = array_filter($key, function($value) use($check) {
    return array_filter(explode(' ', $check), function($valueKey) use($value) {
        return strstr($value, $valueKey);
    });
});

print_r($found);
结果:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

$pattern = '/' . str_replace(' ', '|', $check) . '/';
$foundbyRegex = preg_grep($pattern, $key);

print_r($foundbyRegex);
[2=>忍者神龟]

但是你可以用

结果:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

$pattern = '/' . str_replace(' ', '|', $check) . '/';
$foundbyRegex = preg_grep($pattern, $key);

print_r($foundbyRegex);
或使用和reg表达式:

Array
(
    [2] => Ninja Turtles
)
结果:

$check = "Ninja bleh bleh Turtles";
$key = array("jack and jil","peter likes pan","Ninja Turtles");

$pattern = '/' . str_replace(' ', '|', $check) . '/';
$foundbyRegex = preg_grep($pattern, $key);

print_r($foundbyRegex);

简单,完美!简单,完美!看起来您在表示
$check
时使用了
$chechk
。您在表示
$check
时使用了
$chechk