1

好的... 正确的 batt,让我弄清楚这个问题不是关于什么的。这与 in_array 无关。

因为正如 PHP 手册清楚地解释的那样,函数“in_array”检查数组中是否存在值。但它会根据相等性进行检查。它不是基于部分存在。

例如,如果我正在寻找的值是“溢出”并且我碰巧有一个这样的数组

array('cnn','stackoverflow'),

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

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

PHP 中是否有另一个函数(或有效的单行)可以让我得到我想要的?

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

array_filter($ary,'strlen');

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

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

我正在寻找一个单行,就像在 (strlen) 示例中一样

谢谢。

4

2 回答 2

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;
于 2013-11-06T05:20:24.027 回答
1

蹩脚的选项: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从函数中使用它,或其他任何东西。

于 2013-11-06T05:20:15.847 回答