【问题标题】:How to make an Array Find function recursive如何使数组查找函数递归
【发布时间】:2011-10-19 08:49:20
【问题描述】:

我有一个数组解析函数,用于查找值中的部分单词匹配。如何使其递归以使其适用于多维数组?

function array_find($needle, array $haystack)
{
    foreach ($haystack as $key => $value) {
        if (false !== stripos($needle, $value)) {
            return $key;
        }
    }
    return false;
}

我需要搜索的数组

array(
 [0] =>
  array(
   ['text'] =>'some text A'
   ['id'] =>'some int 1'
 )
 [1] =>
  array(
   ['text'] =>'some text B'
   ['id'] =>'some int 2'
 )
 [2] =>
  array(
  ['text'] =>'some text C'
  ['id'] =>'some int 3'
 )
 [3] =>
  array(
  ['text'] =>'some text D'
  ['id'] =>'some int 4'
 ) 
etc.. 

【问题讨论】:

  • 你可以使用RecursiveFilterIterator的实现。
  • 这个问题有帮助吗? stackoverflow.com/questions/2504685/…
  • @afuzzyllama,不,我有钥匙。我需要检查任何值中是否存在部分单词匹配,然后取回关联键 => 值。这会找到整个值匹配,然后为您提供我并不真正需要的父键。

标签: php search recursion multidimensional-array


【解决方案1】:
function array_find($needle, array $haystack)
{
    foreach ($haystack as $key => $value) {
        if (is_array($value)) {
            return $key . '->' . array_find($needle, $value);
        } else if (false !== stripos($needle, $value)) {
            return $key;
        }
    }
    return false;
}

【讨论】:

  • 你可以修改这个函数来返回一个键数组给目标针,我给你一个类似字符串的面包屑。
  • 很好地识别输出结果中的父数组。
【解决方案2】:

您需要使用数组测试来重载您的函数...

function array_find($needle, array $haystack)
{
    foreach ($haystack as $key => $value) {
        if (is_array($value)) {
            array_find($needle, $value);
        } else {
            if (false !== stripos($needle, $value)) {
                return $key;
            }
        }
    }
    return false;
}

【讨论】:

  • 抱歉,窗口打开了这么久,65Fbef05 用相同的解决方案击败了我
【解决方案3】:

这些解决方案并不是我真正想要的。一开始可能是错误的函数,所以我创建了另一个问题,以更概括的方式表达问题。

Search for partial value match in an Array

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2017-03-27
    • 2015-12-02
    • 2011-02-08
    相关资源
    最近更新 更多