2012-02-10 3 views
1

Таким образом, если имеющий многомерный массив, как:динамически создавать массивы из многомерного массива

Понял здесь (как демо): PHP. Loop through an array and get items with attributes in common

$data

Array 
(
    [0] => stdClass Object 
     (
      [term_id] => 3 
      [name] => Comercial 
     ) 

    [1] => stdClass Object 
     (
      [term_id] => 4 
      [name] => Escolar 
     ) 

    [2] => stdClass Object 
     (
      [term_id] => 5 
      [name] => Kinder 
     ) 

    [3] => stdClass Object 
     (
      [term_id] => 6 
      [name] => Primaria 
     ) 

    [4] => stdClass Object 
     (
      [term_id] => 7 
      [name] => Secundaria 
     ) 

    [5] => stdClass Object 
     (
      [term_id] => 1 
      [name] => Uncategorized 
     ) 

) 

Having 0,1,2 , 3,4,5 stdClass Object s, как я могу создать отдельные массивы для каждого std Object динамически.

Я имею в виду, что функция должна быть в состоянии создать $varX массив, где Х представляет собой число массив из stdObject, автоматически ...

$var0 = $data[0]; $var1 = $data[1]; и так далее, определяется $data первого уровня количество массивов.


Edit: Я увлекся и забыл упомянуть самый важный вопрос:

Having $var0, $var1 ... очень важно, потому что для последующего использования всех или каждого в отдельности ,

Так

  • Требуется создать X переменные в соответствии со счетчиком первого уровня многомерного массива
  • каждый $varX должен быть доступен совместно с остальными $varX или индивидуально.

    $count = count($data); //6

    foreach ($data as $key => $value) { $var.$key = $value; }

Хорошо, что функция работает частично, потому что оттуда я не знаю, как сделать это автоматически добавить $val1, $val2 ... к (экс :) ​​array_intersect($val1,$val2,$val3...

+0

Любопытно, почему вы хотели бы это сделать? То, что вы планируете выполнить с помощью $ var0, который не может быть с $ data [0]? –

+0

проверить изменение, чтобы понять, почему, я забыл спросить его в первый раз – Alex

+0

Я думаю, вы в замешательстве. Я не думаю, что вложение ключа массива в lvalue всегда является правильным подходом. –

ответ

2

Самый простой способ - использовать extract.

extract($data, EXTR_PREFIX_ALL, 'var'); 

С учетом сказанного, он будет добавить подчеркивание (_) после префикса (например, var_0).

Update:

Что касается вашего редактирования, вы можете просто вызвать array_intersect с помощью call_user_func_array. Нет необходимости в переменных.

call_user_func_array('array_intersect', $data); 
+0

проверьте изменение, я добавил, что забыл спросить – Alex

+0

+1, ничего себе мне очень нравится, как выглядит предлагаемое вами решение. Я буду тестировать это завтра, сейчас настало время поспать: D. спасибо – Alex

0

Вы можете просто передать каждый объект в массив.

foreach ($data AS $key => $datum) 
{ 
    $data[$key] = (array) $datum; 
} 

Для обновления вашего:

foreach ($data AS $key => $datum) 
{ 
    $newkey = 'var' . $key; // we want the variable to be called "var" plus the number 
    $$newkey = (array) $datum; // Make it an array 
    $data[$key] = $$newkey; // And update the $data array to contain the array 
} 

Теперь у вас есть $var0, $var1 и т.д., а также доступ к ним в виде коллекции в $data, и они в обоих как массив.

+0

проверить редактирование ... Я добавил еще один вопрос – Alex

+0

Я уже ответил на это, я думаю :) – Joe

+0

hmmm, я не вижу, как (я) я мог бы запустить 'array_intersect' со всеми значениями $ key have. Я не пытался, но я не думаю, что работает 'array_intersect ($ key)' после того, как 'foreach' будет работать, ни внутри него. – Alex

0
foreach ($data as $key => $obj) 
{ 
    $key = 'var'.$key; 
    $$key = $obj; 
} 
+0

проверить изменения ... – Alex

Смежные вопросы