2017-06-23 6 views
0

配列 'c'と 'a'のデータをMyDataの中にマージしようとしていますが、最近、Set :: combineという関数があることがわかりました。 CakePHP 2でcombineメソッドを使うにはどうすればいいですか?私はチュートリアルを検索しましたが、実際に解決策を手伝うことができるまともなものを見つけることはできません。いくつかの例やヒントは素晴らしいでしょう!配列のデータをcakephp2のSet :: combineとマージするには?

[my_test][my_date][MyData]にセット:: combineでマージしたいと思います。

Array 
(
    [0] => Array 
     (
      [MyData] => Array 
       (
        [id] => 79 
        [my_birth_day] => 1990-06-20 
        [my_address] => 400 
        [my_age] => 26 
        [my_name] => Joy 
        [my_id] => 1 
        [created] => 2017-06-19 15:39:44 
       ) 

      [c] => Array 
       (
        [my_test] => math 
       ) 

      [a] => Array 
       (
        [my_date] => 2017-08-13 
       ) 

     ).....Loops 

    [1] => Array 
     (

私は結果は次のようになりたい:

Array 
(
    [0] => Array 
     (
    [MyData] => Array 
       (
        [id] => 79 
        [my_birth_day] => 1990-06-20 
        [my_address] => 400 
        [my_age] => 26 
        [my_name] => Joy 
        [my_id] => 1 
        [created] => 2017-06-19 15:39:44 
        [my_test] => math 
        [my_date] => 2017-08-13 

私は配列をマージし、上記のコードのように、それを表示するには、このコードを書いたが、私はセットを使用したい::コンバイン$ res。

$res = $this->find('all', $cond); // All the data are fetchd from this $res 
      $count = count($res); 
      for($i=0;$i<$count;$i++){ 
       $result[] = $res[$i] ; 

       $fixed_arrays[] = $result[$i]['MyData']; 
       if (!empty($result[$i]['c'])) { 
        $corrupt_c_array = $result[$i]['c']; 
        $fixed_arrays = array_merge($fixed_arrays,$corrupt_c_array); 
       } 
       if(!empty($result[$i]['a'])) { 
        $corrupt_a_array = $result[$i]['a']; 
        $fixed_arrays = array_merge($fixed_arrays, $corrupt_a_array); 
       } 
      } 
      $result['data'] = $fixed_arrays; // This $result['data'] should show the expected result. 

答えて

1

Set :: combine(またはそれ以降のバージョンのCakePHPではHash :: combine)を実行することはできません。それはちょうどそのように動作しません。ただし、現在行っていることを次のように簡略化することができます:

foreach($yourArray as $key => $data){ 
    $yourArray[$key] = $data['MyData'] + $data['c'] + $data['a']; 
} 

これはあなたが探しているものを出力します。

Array (
    [0] => Array (
    [MyData] => Array (
     [id] => 79 
     [my_birth_day] => 1990-06-20 
     [my_address] => 400 
     [my_age] => 26 
     [my_name] => Joy 
     [my_id] => 1 
     [created] => 2017-06-19 15:39:44 
     [my_test] => math 
     [my_date] => 2017-08-13 
    ) 
) 
) 
1
$result = Set::combine('', '{n}.MyData', '{n}.c', '{n}.a'); 

私はあなたのためにこれは便利願っています。

+0

これは正解とマークされている理由はわかりません。私は、Set :: combine(またはHash :: CakePHPの新しいバージョンでの組み合わせ)を使って元の質問が何を求めているのかを確かめることはできません。関数内のvaluePath(パラメータ3)として複数の子配列を指定することはできません。また、指定された答えに厳密に従うと、パラメータ1は配列を必要とし、keyPathが配列に解決できず、パラメータ2として '{n} .MyData'がエラーを生成し、 '{n} .a' groupPathも配列に解決できないため、エラーが発生します。 – JadedCore

+0

私は同意した。 @tonyはcakephpバージョン2の答えを尋ねました。私はそれに応じて答えました。ありがとう。 –

関連する問題