在php中搜索复杂数组并修改值

时间:2016-09-08 07:24:51

标签: php arrays

我有一个复杂的多维数组,看起来像

[name] => Marko Polo
[description] => New application
[number] => ABCD1234
[loans] => Array
    (
        [0] => Array
            (
                [id] => 123
                [application_id] => 456
                [loan_fees] => Array
                    (
                    )

                [loan_parts] => Array
                    (
                        [0] => Array
                            (
                                [id] => 987
                                [loan_id] => 123
                                [product_id] => 49788
                                [product] => Array
                                    (
                                        [id] => 49788
                                        [lender] => MAC

...

我需要创建一种遍历此数组的有效方法,例如,有一组规则来过滤/修改数据。

例如,在数组中有[lender] => MAC,我希望有类似

的内容
loans.loan_parts.product.lender.MAC = 'Macquarie'

这将是一种类型的配置,如果数据数组发生变化,只需将点符号更改为指向lender值的新位置即可。

使用此功能,我需要过滤lender并将其修改为Macquarie而不是Mac

我知道现在有一个很大的禁忌是使用太多的foreach循环而且我已经查看了Collections,但由于内部数组没有命名,我不相信收藏是可能的。< / p>

正如我所说,我想避开

的情况
foreach
    foreach
        if (is_array())
            foreach

eeewww!

如何以最有效的方式执行此操作,因为阵列可能有大尺寸及其复杂性。

1 个答案:

答案 0 :(得分:0)

您可以将array_walk_recursive与回调一起使用,该回调将根据数组的键更改行为。

<?php
//can pass variable by reference to change array in function
function handleMAC(&$item, $key)
{
    if($key == 'lender'){
      $item['MAC'] = 'your value';
    }
}

array_walk_recursive($array, 'handleMAC');
?>