【问题标题】:Search a multidimensional array php [duplicate]搜索多维数组php [重复]
【发布时间】:2011-10-19 07:10:22
【问题描述】:

可能重复:
php. walk up multidimensional array?

我有一个包含数组和对象的多维数组。我必须在其中搜索一个值。我该怎么办?

view Object
(
[db_table] => views_view
[base_table] => users
[args] => Array
    (
    )

[use_ajax] => 
[result] => Array
    (
    )

[pager] => Array
    (
        [use_pager] => 
        [items_per_page] => 10
        [element] => 0
        [offset] => 0
        [current_page] => 0
    )

[old_view] => Array
    (
        [0] => 
    )

[vid] => 1
[name] => userone
[description] => userone
[tag] => 
[view_php] => 
[is_cacheable] => 0
[display] => Array
    (
        [default] => views_display Object
            (
                [db_table] => views_display
                [vid] => 1
                [id] => default
                [display_title] => Defaults
                [display_plugin] => default
                [position] => 1
                [display_options] => Array
                    (

像这样数组继续。如何搜索一个值是否存在?

【问题讨论】:

标签: php arrays multidimensional-array


【解决方案1】:

如果您只想找出某个值是否存在而没有别的,使用recursive iterators 很简单:

$found = false;
foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $value) {
    if ($value == 'theValueImLookingFor') {
        $found = true;
        break;
    }
}

用递归函数写出来并不复杂:

function recursive_in_array($array, $needle) {
    foreach ($array as $value) {
        $isIterable = is_object($value) || is_array($value);
        if ($value == $needle || ($isIterable && recursive_in_array($value, $needle))) {
            return true;
        }
    }
    return false;
}

【讨论】:

  • 谢谢。这是数组搜索的好方法。但我的数组包含数组变量和对象。这个函数跳过了对象。所以我不能用这个
  • 那么你应该能够扩展recursive_in_array 来检查is_object 并允许传递对象,它们也可以使用foreach 进行迭代。我会把它作为练习留给你。
  • 这是正确的吗?但它不起作用 function recursive_in_array($array, $needle) { foreach ($array as $value) { //print_r($value); if ($value == $needle) { 返回真; } else if(is_array($value)) { recursive_in_array($value, $needle); } else if(is_object($value)) { recursive_in_array($value, $needle); } } 返回假; }
  • 您只需将|| is_object($value) 添加到if 行,并删除array 参数的array 类型提示。逻辑是“对于数组中的每个值,如果 value 等于 needle 或者 value 是一个数组或对象,并且 needle 在 value 中的某处,则返回 true”。
  • 我改变了这样的代码。仍然无法正常工作。它始终为真(如果该值不存在,则也如此)。 function recursive_in_array($array, $needle) { foreach ($array as $value) { if ($value == $needle || is_object($value) || (is_array($value) && recursive_in_array($value, $needle ))) { 返回真; } } 返回假; } echo recursive_in_array($view, "user_reorder");
猜你喜欢
  • 2013-09-20
  • 2013-01-25
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 2018-01-16
相关资源
最近更新 更多