尝试编写一个函数来搜索数组中的值,依赖于子元素中的引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试编写一个函数来搜索数组中的值,依赖于子元素中的引用相关的知识,希望对你有一定的参考价值。

我怎样才能实现这种行为?我试图写一个函数来实现这个逻辑,但由于某种原因它不起作用。这是我试图做http://sandbox.onlinephpfunctions.com/code/638fc7796a8918e2b7ef1469b746c29adba8d0cd的链接

<?php

    $test = [
      'deepLink' => [
        1,2,3,4,5, 'testMe'
      ],    
      'base' => [ // child for (2 and target)
        'SuperMan',
        'deepLink'  // expected true, if we call array_search_for_target_key($test, 'target', 'testMe')
      ],    
      2 => [
        'base' // link on child (base)
      ],    
      'target' => [
        2   // link on child (2)
      ],
    ];

function array_search_for_target_key($array = array(), $targetKkey, $search) {
   $res = false;
    foreach($array as $k => $v) {
        if ($k === $targetKkey && in_array($search, $v)) {
              $res = true;
        } else {
           if (is_array($v)) {
               foreach ($v as $nested) {
                 $array =  $nested;
                 $res = array_search_for_target_key($array, $nested, $search);   
               }
           }
        }
    }

    return $res;
}

var_dump( array_search_for_target_key($test, 'target', 'SuperMan'));

所以我解决了我的问题,这里是qazxsw poi

答案

你在这部分得到错误

link

$array = $nested; $res = array_search_for_target_key($array, $nested, $search); 不是一个数组,所以它会抛出一个错误。这是

$array

所以改变你的代码:

Invalid argument supplied for foreach() 

有了这个

foreach ($v as $nested){
    $array =  $nested;
    $res = array_search_for_target_key($array, $nested, $search);   
} 

更改后,我们将遇到新的错误

foreach ($v as $nested) {
    $res = array_search_for_target_key($v, $nested, $search);   
}

要解决这个问题,我们需要检查变量是否是一个数组。

从这个改变你的代码:

in_array() expects parameter 2 to be array, integer given

有了这个

 if ($k === $targetKkey && in_array($search, $v))

还在你的:

 if ($k === $targetKkey && is_array($v) && in_array($search, $v))

if ($k === $targetKkey && is_array($v) && in_array($search, $v)) { $res = true; } 改为$res = true。如果我们已经找到目标,我们不想继续。将return true;改为$k === $targetKkey$k == $targetKkey将返回2 === '2',所以将其更改为false

这是整个代码

==

<?php $test = [ 'deepLink' => [ 1,2,3,4,5, 'testMe' ], 'base' => [ // child for (2 and target) 'SuperMan', 'deepLink' // expected true, if we call array_search_for_target_key($test, 'target', 'testMe') ], 2 => [ 'base' // link on child (base) ], 'target' => [ 2 // link on child (2) ], ]; function array_search_for_target_key($array, $targetKkey, $search) { $res = false; foreach($array as $k => $v) { if ($k == $targetKkey && is_array($v) && in_array($search, $v)) { return true; } else { if (is_array($v)) { foreach ($v as $nested) { $res = array_search_for_target_key($v, $nested, $search); } } } } return $res; } var_dump( array_search_for_target_key($test, 'target', 'SuperMan'));

以上是关于尝试编写一个函数来搜索数组中的值,依赖于子元素中的引用的主要内容,如果未能解决你的问题,请参考以下文章

使用无序映射与数组搜索

我正在编写一个 PHP 函数来搜索 Wordpress 模板文件中的邮政编码数组。为啥我的函数不返回值?

C语言试题二十一之定义n×n的二维数组编写函数 fun(int a[][n])功能是:使数组左下半三角元素中的值全部置成0。

C语言试题二十一之定义n×n的二维数组编写函数 function(int a[][n])功能是:使数组左下半三角元素中的值全部置成0。

将一个数组中的元素按逆序存放,程序填空

编写函数,返回在一个整数组中出现次数最多的数及其出现次数。