【问题标题】:search&replace array key using PHP and CakePHP Set Class使用 PHP 和 CakePHP Set Class 搜索和替换数组键
【发布时间】:2010-01-24 14:14:02
【问题描述】:

我需要编写在多维数组中搜索和替换键的函数,方法如下:

输入数组:

 [0] => Array
    (
        [Foo] => sometext
        [Foo2] => Array
            (
                [lorem] => 1
                [Avatar2] => Array
            (
                [meta_key] => avatar2
                [meta_value] => Array
                    (
                        [small] => 65606449bb5b6d10c2dfce9ecb88fdbd-24-small.jpeg
                        [medium] => 65606449bb5b6d10c2dfce9ecb88fdbd-45-medium.jpeg
                        [large] => 65606449bb5b6d10c2dfce9ecb88fdbd-75-large.jpeg
                        [source] => 65606449bb5b6d10c2dfce9ecb88fdbd.jpg
                    )

            )
            )
        [Avatar] => Array
            (
                [meta_key] => avatar
                [meta_value] => Array
                    (
                        [small] => 65606449bb5b6d10c2dfce9ecb88fdbd-24-small.jpeg
                        [medium] => 65606449bb5b6d10c2dfce9ecb88fdbd-45-medium.jpeg
                        [large] => 65606449bb5b6d10c2dfce9ecb88fdbd-75-large.jpeg
                        [source] => 65606449bb5b6d10c2dfce9ecb88fdbd.jpg
                    )

            )
    )

[1] => Array
    (

        [Wallpaper] => Array
            (
                [meta_key] => wallpaper
                [meta_value] => Array
                    (
                        [small] => 65606449bb5b6d10c2dfce9ecb88fdbd-24-small.jpeg
                        [medium] => 65606449bb5b6d10c2dfce9ecb88fdbd-45-medium.jpeg
                        [large] => 65606449bb5b6d10c2dfce9ecb88fdbd-75-large.jpeg
                        [source] => 65606449bb5b6d10c2dfce9ecb88fdbd.jpg
                    )

            )
    )   

输出数组应如下所示:

      [0] => Array
    (
        [Foo] => sometext
        [Foo2] => Array
            (
                [lorem] => 1
                [Avatar2] => Array (
                        [small] => 65606449bb5b6d10c2dfce9ecb88fdbd-24-small.jpeg
                        [medium] => 65606449bb5b6d10c2dfce9ecb88fdbd-45-medium.jpeg
                        [large] => 65606449bb5b6d10c2dfce9ecb88fdbd-75-large.jpeg
                        [source] => 65606449bb5b6d10c2dfce9ecb88fdbd.jpg
                    )

            )
        [Avatar] => Array
            (
                [small] => 65606449bb5b6d10c2dfce9ecb88fdbd-24-small.jpeg
                [medium] => 65606449bb5b6d10c2dfce9ecb88fdbd-45-medium.jpeg
                [large] => 65606449bb5b6d10c2dfce9ecb88fdbd-75-large.jpeg
                [source] => 65606449bb5b6d10c2dfce9ecb88fdbd.jpg
            )
    )

[1] => Array
    (

        [Wallpaper] => Array
            (

                [small] => 65606449bb5b6d10c2dfce9ecb88fdbd-24-small.jpeg
                [medium] => 65606449bb5b6d10c2dfce9ecb88fdbd-45-medium.jpeg
                [large] => 65606449bb5b6d10c2dfce9ecb88fdbd-75-large.jpeg
                [source] => 65606449bb5b6d10c2dfce9ecb88fdbd.jpg


            )
    )

如您所见,我需要重新格式化 meta_key/meta_value 部分。欢迎任何建议(原始 PHP 或使用 CakePHP Set Class):)

【问题讨论】:

    标签: php class cakephp multidimensional-array set


    【解决方案1】:

    您肯定需要为此使用递归:

    function replace_inner_meta_keys($arr) {
        if (array_key_exists('meta_value', $arr)) {
            // return meta value instead of original array
            return $arr['meta_value'];
        }
        else {
            foreach ($arr as $key => $value) {
                if (is_array($value)) {
                    // travel through array recursivly
                    $arr[$key] = replace_inner_meta_keys($value);
                }
            }
            return $arr;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2012-04-28
      • 2012-01-29
      • 2010-11-07
      • 1970-01-01
      • 2014-09-19
      • 2017-11-24
      • 2011-07-17
      • 1970-01-01
      相关资源
      最近更新 更多