Удаление внешнего массива в php - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть некоторые функции, которые работают с данными, представленными в формате массива.Все эти функции выполняют одну и ту же работу, поэтому я хотел бы объединить их в одну функцию.

Проблема в том, что каждая из них получает массивы различной глубины: одно-, двух- и трехмерные массивыиспользуется и, в некоторых будущих реализациях, могут использоваться даже четырехмерные массивы.

В любом случае значимые и необходимые данные всегда находятся в двух самых внутренних массивах, поэтому мне нужно избавиться от внешних массивовпока у меня есть только самые внутренние два уровня.Я сомневаюсь не просто в том, как это сделать, а в том, как сделать это элегантно и эффективно, поскольку мой текущий метод довольно неуклюж.

Текущий метод:

function add() {
    $data = func_get_args();
    if(count($data)>0) {
        if(is_array($data[0])) {
            if(is_array($data[0][0])) {
                foreach($data[0] as $row) {
                    $this->items[] = $row;
                }
            } else {
                $this->items[] = $data[0];
            }
        } else {
            $this->items[] = $data;
        }
    }
} 

Некоторые примеры использования:

$list->add('one', 'two', 'three', 'four', 'five');

$list->add($data_from_DB_in_array_format);

$list->add(
    array(
        array('one', 'two', 'three', 'four', 'five'),
        array('six', 'seven', 'eight', 'nine', 'ten')
        )
    );

$list->add(
    array(
        array(
            array('one', 'two', 'three', 'four', 'five'),
            array('six', 'seven', 'eight', 'nine', 'ten')
            )
        )
    );

Поскольку данные восстанавливаются с помощью func_get_args (), все помещается в дополнительный массив.

Результат должен быть примерно таким:

    array(
        array('one', 'two', 'three', 'four', 'five'),
        array('six', 'seven', 'eight', 'nine', 'ten')
        );

1 Ответ

1 голос
/ 29 сентября 2011

Есть только один способ добиться этого - рекурсивность и немного магии функций массива.Вероятно, это не ваше точное решение, но вам следует начать, если вам нужна дополнительная помощь, пожалуйста, позвоните мне:

<?php

$data = array(
    'test1' => array(
        'test2' => array(
            'test3' => array(
                'test4' => array(
                    1,
                    2,
                    3
                ),
                'test5' => array(
                    4,
                    5,
                    6
                ),
                'test6' => array(
                    7,
                    8,
                    9
                ),
            )
        )
    )

);
function returnLast2Levels($item){
   if(is_array($item) && is_array(reset($item)) && is_array(reset(reset($item)))){
      //This $item has more than 2 levels, delve deeper
      return returnLast2Levels(reset($item));
   }elseif(is_array($item) && is_array(reset($item)) && !is_array(reset(reset($item)))){
      //This $item has 2 levels deep of array
      return $item;
   }
}

var_dump(returnLast2Levels($data));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...