я хочу получить один ключ из многомерного массива

0

У меня есть один многомерный массив категории и подкатегории. Я хочу получить "идентификатор" всех массивов категорий и подкатегорий. мой массив подобен этому.

Array ([1] => Array ([id] => 14 [name] => Категория 1 [parent_id] => 13 [sub_menu] => Array ([2] => Array ([id] => 15 [name ] => Категория 2 [parent_id] => 14 [sub_menu] => Массив ([6] => Массив ([id] => 19 [name] => Категория 6 [parent_id] => 15 [sub_menu] => Массив()))) [4] => Array ([id] => 17 [name] => Категория 4 [parent_id] => 14 [sub_menu] => Array()))))

public function get($data)
    {
        foreach($data as $key=>$value1)
        {
            if($key=='id'); 
              {
                $data= $value1['id'];
              }
            if(is_array($key))
            {
                $data=$this->get($kay);
            }
        }
        return $data;
    }
$val=$this->get($data);
print_r($val);
Теги:
arrays
multidimensional-array

1 ответ

0
Лучший ответ

В вашем коде выше вы зацикливаете (и так трогаете каждый элемент в массиве), но каждый раз, когда вы это делаете:

$data= $value1['id'];

или это:

$data=$this->get($kay);

(который, кстати, неправильно использует $key как $kay)

вы перезаписываете значение $data. Поэтому наилучшим вариантом является то, что вы получаете последний $ id, который покрывается. (Вы также получили свои ключи и значения и массивы, смешанные в разное время.)

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

public function get($data)
    {
        if ($data['id'])
            $rtn = array($data['id']);
        else
            $rtn = array();
        foreach($data as $v)
        {
            if(is_array($v))
            {
                $rtn = array_merge($rtn, $this->get($v));
            }
        }
        return $rtn;
    }
$val=$this->get($data);
print_r($val);

Хотя это приложение не особенно сложно, написание рекурсивных функций не является стартовым навыком в любом виде программирования. Поскольку кажется, что вы все еще немного туманны, как обрабатывать массивы (без рекурсии), возможно, было бы полезно работать с некоторыми учебниками.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню