У меня есть один многомерный массив категории и подкатегории. Я хочу получить "идентификатор" всех массивов категорий и подкатегорий. мой массив подобен этому.
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);
В вашем коде выше вы зацикливаете (и так трогаете каждый элемент в массиве), но каждый раз, когда вы это делаете:
$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);
Хотя это приложение не особенно сложно, написание рекурсивных функций не является стартовым навыком в любом виде программирования. Поскольку кажется, что вы все еще немного туманны, как обрабатывать массивы (без рекурсии), возможно, было бы полезно работать с некоторыми учебниками.