2016-11-10 5 views
1

私の問題は私が望む構造体に配列を配置することはできません。 array1とarray2は動的に生成されます。配列2で見ることができるように、配列1で同じsubjectidを持っています。つまり、要素cpe 305の下にあることを意味します。配列5のidが5のすべての要素は、cpe配列をPHPで配列

Array 
(
[0] => Array 
    (
     [subjectid] => 5 
     [subjectcode] => Cpe 305 
    ) 

[1] => Array 
    (
     [subjectid] => 4 
     [subjectcode] => Cpe 304 
    ) 

) 

配列2:

Array 
(
[0] => Array 
    (
     [subjectid] => 5 
     [soid] => 1 
     [socode] => A 
     [sodesc] => Ability to apply knowledge of mathematics and science to solve engineering problems 
    ) 

[1] => Array 
    (
     [subjectid] => 5 
     [soid] => 3 
     [socode] => C 
     [sodesc] => Ability to design a system, component, or process to meet the desired needs within realistic constraints such as economic, environmental, social, political, ethical, health and safety, manufacturability, and sustainability, in accordance to standards 
    ) 

[2] => Array 
    (
     [subjectid] => 5 
     [soid] => 4 
     [socode] => D 
     [sodesc] => Ability to function on multidisciplinary teams 
    ) 

[3] => Array 
    (
     [subjectid] => 5 
     [soid] => 5 
     [socode] => E 
     [sodesc] => Ability to identify, formulate, and solve engineering problems 
    ) 

[4] => Array 
    (
     [subjectid] => 5 
     [soid] => 9 
     [socode] => I 
     [sodesc] => Recognition of the need for, and an ability to engage in life-long learning 
    ) 

[5] => Array 
    (
     [subjectid] => 4 
     [soid] => 10 
     [socode] => J 
     [sodesc] => Knowledge of contemporary issues 
    ) 

0 CPE 304

配列1と305と同じ論理私は

これを試してみた何

OUTPUT(私の所望の構造)

Array(
[subjectid] => 5 
[subjectcode] => Cpe 305 
[sodetails] => array(
       [0]=>Array ([soid]=>1 
          [socode]=>A) 
       [1]=>Array([soid]=>3 
          [socode]=>C .....until the last 
       ) 
[subjectid] => 4 
[subjectcode] => Cpe 305 
[sodetails] => array(
       [0]=>Array ([soid]=>10 
          [socode]=>J) 
             .......until the last 
       ) 

はコードイムテストです。私はテストコードの中にわずかなデータしか入れていません。代わりにm x n回ループ/反復処理を実行しているの

 $so = array(); 
     $exist = array(); 

     foreach ($this->subject as $key => $value) { 
      foreach ($this->sodetails as $key2 => $value2) { 
      if($value['subjectid'] === $value2['subjectid']){ 

       $exist = array(
        "subjectid" => $value['subjectid'], 
        "details" =>array(
        "soid" => $value2['soid'] 
       ) 
      ); 
       array_push($so, $exist); 
      } 
      } 
     } 
+0

コードを書きましたか?この問題を解決するための私たちの努力を示す – rokas

+0

あなたの試行を見せてください。 – take

答えて

1

まずが間違っている、あなたの帰りの配列のキーとしてsubjectidを渡す必要があります。配列は "subjectid"、 "subjectcode"のように複数の同じインデックスを持つことはできません。私たちは異なるインデックスを持つ必要があります。外部配列の索引としてsubjectidを使用することが賢明です。

まず、外側の配列をarray1のように準備します。

foreach($this->subject as $key => $val){ 
    $myArray[$val['subjectid']]['subjectid'] => $val['subjectid']; 
    $myArray[$val['subjectid']]['subjectcode'] => $val['subjectcode']; 
} 

ここで、あなたのソテッテイル配列を繰り返します。

foreach($this->sodetails as $key => $val){ 
    $temp['soid'] = $val['soid']; 
    $temp['socode'] = $val['socode']; 
    array_push($myArray[$val['subjectid']]['sodetails'], $temp); 
} 

その他の方法もあります。しかしそれは私のスタイルであり、私はそれがあなたの問題を解決すると信じています。

+0

あなたは歓迎です:) –

1

、何を行う可能性は、最初$arrray1のキーとしてsubjectidを持ち、自然PHPの配列キーの取り扱いが仕事をやらせています。

$new_array1 = array(); 
foreach($arrray1 as $item){ 
$new_array1[$item['subjectcode']] = $item; 
} 

foreach($array2 as $desc){ 
if(array_key_exists($desc['subjectid'],$new_array1){ 
    $new_array1[$desc['subjectid']]['desc'][] = $desc; 
} 
} 

このようにすれば、m + nの繰り返しが必要です。

1

は、あなただけのすべての出力配列の

$exist = array(); 
      foreach ($this->subject as $key => $value) { 
       foreach ($this->sodetails as $key2 => $value2) { 
       if($value['subjectid'] === $value2['subjectid']){ 
        $exist[$value['subjectid']]['subjectid'] = $value['subjectid']; 
        $exist[$value['subjectid']]['subjectcode'] = $value['subjectcode']; 
        $exist[$value['subjectid']]['sodetails'] = array(array('soid'=>$value2['soid']),array('socode'=>$value2['socode'])); 
       } 
       } 
      }