Разбор многомерного массива по другому массиву с указанными ключами - PullRequest
0 голосов
/ 21 февраля 2020

Я хочу проанализировать основной массив, используя другой массив, содержащий ключи. Например, у меня есть следующий основной массив:

$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',
];

Мне нужен способ получить указанный c путь из массива с помощью массива настроек

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;
    }

1 Ответ

1 голос
/ 21 февраля 2020

Если пример так прост, как кажется, вы можете просто отделить значения внутри ключа $ 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;
}
...