2011-07-24 19 views
0

私はDBに格納された項目のリストを持っており、リクエストした後は配列($data)になっています。現在、配列には約200の項目があり、それぞれがキー値配列です。データ配列内の各要素には[Acr]という名前のキーが割り当てられています。PHP配列のデータ操作

今問題は、このアレイ

Array 
( 
    [0] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => ARR 
      [Valid] => 1 
      [Orig] => 1 
     ) 

    [1] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => ABC 
      [Valid] => 1 
      [Orig] => 1 
     ) 

    [2] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => XYZ 
      [Valid] => 1 
      [Orig] => 1 
     ) 
    ... 

同じACRを有するが、そのACRとの最初のアイテムのサブ要素であるアイテムが存在することです。例えばARRとしてAcrを持つ$dataには10個のアイテムがありますが、そのサブエレメントをsubというキーの下にそのAcr値を持つ元の(別名最初の)配列アイテムに追加したいと思います。反復した後、それがこれを行います。

Array 
( 
    [0] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => ABC 
      [Valid] => 1 
      [Orig] => 1 
     ) 

    ..... 

    [14] => Array 
     (
      [ID] => 2 
      [Name] => Name Here 
      [Acr] => ARR 
      [Valid] => 1 
      [Orig] => 1 
      [Sub] => 
        [0] => Array 
         (
          [ID] => 23 
          [Name] => Sub Name Here 
          [Acr] => ARR 
          [Valid] => 1 
          [Orig] => 0 
         ) 

        [1] => Array 
         (
          [ID] => 24 
          [Name] => Sub Name Here 
          [Acr] => ARR 
          [Valid] => 0 
          [Orig] => 1 
         ) 
     ) 

     ... 

これを行う方法がわかりません。また、そのすべてがソートされているので、最初にARRサブARRが表示され、サブ要素を持つオリジナルのカテゴリは約5つしかないので、追加するものを知ることでこれを行うことができます。偉大になる。

私が問題を正しく説明しているかどうかは分かりません。質問がありましたら、私に尋ねてください。数分以内に返信します。ケースでは

おかげ

+1

あなたは構造をはっきりと説明しましたが、あなたの質問は何ですか?どのようにこれらの操作やアクセスを望んでいますか? –

+0

元の配列では、すべてのキーは数値です。それは操作された配列ですべてのキーが英数字であることが問題になるでしょうか? – rabudde

+0

こんにちは、元の配列が 'data'と呼ばれることを考えて、配列を繰り返し処理するコードを探しています。これはあなたの質問に答えますか? – Kartik

答えて

2

は、その英数字キーを操作配列に受け入れられている:

$new = array(); 
foreach ($array as $entry) { 
    if (!array_key_exists($entry['Acr'], $new)) { 
    $entry['Sub'] = array(); 
    $new[$entry['Acr']] = $entry; 
    } else $new[$entry['Acr']]['Sub'][] = $entry; 
} 
+0

それをした!どうもありがとう! – Kartik

1

、これを行うことをテストし、それならば私に知らせてできる小さな関数の試み作品

$newRecord = array(); 
foreach($records as $record){ 
    # if the Acr already exists in a primary record, 
    # insert this record as a Sub-record. 
    if(array_key_exists($record['Acr'], $newRecord)){ 
     $newRecord[$record['Acr']]['Sub'][] = $record; 
    # else insert it as a primary record 
    } else { 
     $newRecord[$record['Acr']] = $record; 
    } 
}