首页 > 解决方案 > 通过具有指定键的其他数组解析多维数组

问题描述

我想使用包含键的其他数组来解析主数组例如,我有以下主数组:

$test_array = [
       'something' => 'Ceva',
       'products' => [
           'item' => [
               [
                   'id' => '1',
                   'images' => [
                       [
                           'image' => 'image1.jpg'
                       ],
                       [
                           'image' => 'image2.jpg'
                       ]
                   ]
               ],
               [
                   'id' => '1',
                   'images' => [
                       [
                           'image' => 'image12.jpg'
                       ],
                       [
                           'image' => 'image22.jpg'
                       ]
                   ]
               ],
           ],
       ]
]

这是包含键的第二个数组:

$settings = [
  'products_path' => 'products,item',
  'images_path' => 'products,item',
];

我需要一种使用设置数组从数组中获取特定路径的方法

example_function($test_array, $settings['products_path']);

应该返回:

    [
    'id' => '1',
    'images' => [
        [
            'image' => 'image1.jpg'
        ],
        [
            'image' => 'image2.jpg'
        ]
    ]
],
[
    'id' => '1',
    'images' => [
        [
            'image' => 'image12.jpg'
        ],
        [
            'image' => 'image22.jpg'
        ]
    ]
],

更新

我已经使用此功能完成了此操作:

public function getPath($array, $columns, $return = []) {
        if(!empty($columns)) {
            foreach ($columns as $column_key => $column) {

                if(isset($array[$column])) {
                    unset($columns[$column_key]);
                    $return = $this->getPath($array[$column], $columns);
                }
            }
        } else {
            $return = $array;
        }

        return $return;
    }

标签: phparraysmultidimensional-array

解决方案


如果该示例看起来很简单,您可以将 $settings 键中的值分开并将它们用作数组索引。

function example_function($test_array, $settings_key_value ) {

    // Separate the two $settings values from the 'product_path' key at the comma, using the first as your first index inside $test array, and second word as second index.
    $settings_value = explode(',', $settings_key_value);
    $new = $test_array[$settings_value[0]][$settings_value['1']];

}

只需按照您的示例调用该函数:

example_function($test_array, $settings['products_path']);

此外,可能有 11,000 种替代方法可以找到您的答案。所有的工具都在那里,如果 $settings 数组可以稍微改变一下,你甚至不需要explode() 函数就可以到达那里。

编辑:由于每个键中可能有不同数量的值:

function example_function($test_array, $settings_key_value ) {

    $settings_values = explode(',', $settings_key_value);
    foreach ($settings_values as $settings_value ) {
        $output = $test_array[$settings_value];
        if ( is_array( $output )) {
            $test_array = $output;
        }
        break;
    }

    return $test_array;
}

推荐阅读