【问题标题】:Search on my multidimensional array list在我的多维数组列表中搜索
【发布时间】:2018-03-11 14:21:17
【问题描述】:

我有这个数组:

Array
(
    [8008] => Array
        (
            [main_mob_vnum] => 8008
            [0] => Array
                (
                    [drop_mob_vnum] => 50300
                    [drop_mob_count] => 2
                    [drop_mob_percent] => 110.00
                )

            [1] => Array
                (
                    [drop_mob_vnum] => 39030
                    [drop_mob_count] => 2
                    [drop_mob_percent] => 85.00
                )
        )

    [8009] => Array
        (
            [main_mob_vnum] => 8009
            [0] => Array
                (
                    [drop_mob_vnum] => 50300
                    [drop_mob_count] => 4
                    [drop_mob_percent] => 110.00
                )

            [1] => Array
                (
                    [drop_mob_vnum] => 50125
                    [drop_mob_count] => 1
                    [drop_mob_percent] => 75.00
                )
        )

    [8010] => Array
        (
            [main_mob_vnum] => 8009
            [0] => Array
                (
                    [drop_mob_vnum] => 50125
                    [drop_mob_count] => 4
                    [drop_mob_percent] => 110.00
                )
        )
)

我想做一个像 function searchArray($array,$vnum) if $vnum is == with drop_mob_vnum 取出之前的数组并将所有这些数组键放在新数组中

例如,searchArray($array,50300) 应返回如下数组:array(8008,8009),因为 8010 没有 drop_mob_vnum == 50300

我知道 StackOverflow 要求我用代码发布我的问题,但我不知道从哪里开始。如果有人可以帮助我,我将不胜感激。谢谢!

【问题讨论】:

  • 尝试一些 foreach 循环并每次转储结果。它将帮助您找到解决方案:D

标签: php arrays arraylist


【解决方案1】:

这个函数应该可以解决问题:

function find_vnum($array,$value)
{
    $result = array();

    foreach ($array AS $k1 => $v1)
    {
        foreach ($v1 AS $k2 => $v2)
        {
            if ($k2 === 'main_mob_vnum') {
                continue;
            }

            foreach ($v2 AS $k3 => $v3)
            {
                if ($k3 !== 'drop_mob_vnum') {
                    continue;
                }

                if (($v3 === $value) && !in_array($k1, $result)) {
                    $result[] = $k1;
                }
            }
        }
    }

    return $result;
}

鉴于您的样本数据:

print_r(find_vnum($data,50300));

// Array
// (
//    [0] => 8008
//    [1] => 8009
// )

你可以看到一个工作演示here

【讨论】:

  • 感谢您的宝贵时间和帮助!你能看看我的帖子吗?因为我看到你在这里使用了 3 个循环。我使用 2 个循环来执行此操作我不知道我是否做错了什么,但我得到了相同的结果:P
猜你喜欢
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 2020-07-11
  • 2022-01-03
  • 2016-09-19
  • 2017-03-23
相关资源
最近更新 更多