PHP:检查数组中是否存在值(不相等但作为其中的一部分)

时间:2013-11-06 05:09:52

标签: php

好的......正确的打击,让我清楚问题不在于此。 它不是关于in_array。

因为PHP手册清楚地解释了,函数'in_array'检查数组中是否存在值。但它会根据平等进行检查。它不基于部分存在。

例如,如果我正在寻找的值是'溢出',而我碰巧有一个像这样的数组

array('cnn','stackoverflow')

in_array会以FALSE返回,告诉我此数组的in值中不存在overflow,这在某种程度上是TRUE。但在某种程度上,是假的。

对我来说,字符串“overflow”确实存在于字符串stackoverflow中。“因此,它应该返回TRUE。当然我不能多说这一点。

PHP中是否有其他功能(或高效的单行程)来获取我想要的内容?

我正在寻找像这样的解决方案

array_filter($ary,'strlen');

以非常有效的方式从$ ary中删除空行。

我不想通过传统的方式通过foreach,并使用strpos在针和干草堆之间进行比较。我已经知道那个解决方案。

我正在寻找一个衬垫,就像(strlen)示例中那样

THX。

2 个答案:

答案 0 :(得分:2)

php中没有可满足作者确切要求的功能。开发人员必须编写一些代码,以便您可以尝试下面的代码:

function array_check($arr, $keyword) {
foreach($arr as $index => $string) {
    if (strpos($string, $keyword) !== FALSE)
        return $index;
  } 
}
 var_dump(array_check(array('cnn','stackoverflow'),'overflow'));
 exit;

答案 1 :(得分:1)

Lame选项:false !== strpos(implode($ary, '|'),'overflow')只要分隔符(|此处)不在您的搜索字符串中,就可以了。

更复杂的选项:count(array_filter( $ary, function($x) { return strpos($x, 'overflow'); } ) );

编辑:第二个选项完整代码如下所示:

$ary = array('cnn', 'stackoverflow'); // or whatever your data is
(bool) count(array_filter( $ary, function($x) { return strpos($x, 'overflow'); } ) );

count()值如果找不到则为0,如果找到匹配则为正值。因此,您可以在if()语句中使用它,return从函数中使用它,或者其他任何内容。