2012-02-10 11 views
1

から配列を作成:のような多次元配列した場合、動的だから、多次元配列

は(デモなど)、ここからそれを手に入れた:0,1,2を持つ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 
     ) 

) 

を、3,4,5 stdClass Object s、それぞれstd Objectの個々の配列を動的に作成する方法はありますか。 $data最初のレベルによって決定私は関数はXを自動的に、stdObjectの配列番号である$varXアレイを作成することができなければならないことを意味し、そのことにより

...ように

$var0 = $data[0]; $var1 = $data[1];と、配列の数。


編集: 私は離れて運ばれ、最も重要な問題に言及するのを忘れてしまった:

$var0を持つ、$var1を...ので、すべて、または個別に各1の後に使用するために非常に重要です。

ので

  • は多次元配列
  • $varXまたは個別の残りの部分と共通してアクセスできるようにする必要が$varXそれぞれの最初のレベルの数に応じてX変数を作成する必要があります。

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

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

OK]をクリックして、その関数がそこから私は(元に...それは自動的に$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)の後にアンダースコア(_)を追加します。

更新:

あなたの編集について、あなたは単にcall_user_func_arrayを使用してarray_intersectを呼び出すことができます。変数は必要ありません。

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'を実行することができません。私は試していませんでしたが、 'foreach'の後で' array_intersect($ key) 'を実行しているとは思っていません。 – Alex

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

編集を確認してください... – Alex