2012-02-16 9 views
1

次の質問は、おそらくケーキPHPでいくつかのPHP関数を使ってfindメソッドの使用を変更することで解決できます。私はCakeを使って解決することを好むが、それほど重要ではない。私はちょうどModelインデックスを削除し、ちょうど数値のいずれかを使用したい配列内の不要なネストされたインデックスを削除する(Cake PHPで生成)

Array 
(
    [0] => Array 
     (
      [Model] => Array 
       (
        [id] => 14 
        [foo] => bar 
       ) 

     ) 

    [1] => Array 
     (
      [Model] => Array 
       (
        [id] => 15 
        [foo] => something 
       ) 

     ) ............. 

:私はこのような任意の配列を持っています。私はおそらくコールの'contain'一部を変更する必要が

$arr = $this->Model->find('all', array('contain' => false)); 

:以下の関数は、この配列を生成しました。基本的には、各Modelインデックスの下に表示されるデータに加えて、私は2番目と3番目のモデルも持っていて、contain = falseはCakeが現在のモデル(Model)からデータを取得することを制限するだけです。

答えて

4

私が正しくあなたの質問を理解していれば、私はCakePHPの設定だと思う:: 0123を支援する機能を兼ね備えを返します。:

$result = Set::combine($your_array, '{n}.Model.id', '{n}.Model.data'); 

これはになります:

Array 
(
    [14] => Array 
     (
      [foo] => bar 
     ) 
    [15] => Array 
     (
      [foo] => something 
     ) 
) 
+0

そのおかげで、ありがとう! –

-1

あなたがこれを行うことがあります。

あなたの配列を変更するコードの独自の作品を記述する必要が
$tmp = $this->Model->find('all', array('contain' => false)); 

$arr = $tmp['ModelName']; 
+0

「含む」をクエリに追加する必要はありません。 –

+0

私はいつも 'contain = array()'を使いますが、 'recursive'のデフォルトレベルが-1より大きければ、それを追加しなければなりません! – mark

+1

いいえ、配列構造はそうではありません。 – ale

3

は、ここにあなたがやりたいだろう機能です

function reformArray($array,$modelName) 
{ 

    foreach($arr as $key => $value) 
    { 
     $newArr[] = $arr[$key][$modelName]; 
    } 

    return $newArr; 
} 
(あなたはそれを向上させることができます)

あなたがこの機能に使用するアレイとモデル名を渡す必要があり、あなたの結果

+0

そのおかげで、おかげさまでたくさん! –

1
$a = array(
    array(
     'User' => array(
      'id' => 2, 
      'group_id' => 1, 
      'Data' => array(
       'user' => 'mariano.iglesias', 
       'name' => 'Mariano Iglesias' 
      ) 
     ) 
    ), 
    array(
     'User' => array(
      'id' => 14, 
      'group_id' => 2, 
      'Data' => array(
       'user' => 'phpnut', 
       'name' => 'Larry E. Masters' 
      ) 
     ) 
    ), 
    array(
     'User' => array(
      'id' => 25, 
      'group_id' => 1, 
      'Data' => array(
       'user' => 'gwoo', 
       'name' => 'The Gwoo' 
      ) 
     ) 
    ) 
); 

RUN THIS機種名ユーザを削除するに

Set::extract($a, '{n}.User'); 

がTHIS

を返します。 CakePHPの2で
$a = array(
     array(

       'id' => 2, 
       'group_id' => 1, 
       'Data' => array(
        'user' => 'mariano.iglesias', 
        'name' => 'Mariano Iglesias' 
       ) 

     ), 
     array(

       'id' => 14, 
       'group_id' => 2, 
       'Data' => array(
        'user' => 'phpnut', 
        'name' => 'Larry E. Masters' 
       ) 

     ), 
     array(

       'id' => 25, 
       'group_id' => 1, 
       'Data' => array(
        'user' => 'gwoo', 
        'name' => 'The Gwoo' 
       ) 

     ) 
    ); 
0

$data = $this->Model->find('all'); 
$data = Set::extract('/Model/.', $data); 

また

foreach ($data as $k => &$t) { 
    $t = $t['Model'] 
} 
0

それはObjectとはるかに簡単になりますforeachのことで、この結果を達成することができます。 ArrayObjectに変更します。

は、実際に私はnested arrayと同じ問題に直面していたと私はあなたがmodel_namenested arrayようにしたくない場合は、あなたがこのソリューションを好むことができ​​

で解決策を見つけました。

$data = array(
    array(
     "IndexedPage" => array(
      "id" => 1, 
      "url" => 'http://blah.com/', 
      'hash' => '68a9f053b19526d08e36c6a9ad150737933816a5', 
      'get_vars' => '', 
      'redirect' => '', 
      'created' => "1195055503", 
      'updated' => "1195055503", 
     ) 
    ), 
    array(
     "IndexedPage" => array(
      "id" => 2, 
      "url" => 'http://blah.com/', 
      'hash' => '68a9f053b19526d08e36c6a9ad150737933816a5', 
      'get_vars' => '', 
      'redirect' => '', 
      'created' => "1195055503", 
      'updated' => "1195055503", 
     ), 
    ) 
); 

$mapped = Set::map($data); 

/* $mapped now looks like: */ 

    Array 
    (
     [0] => stdClass Object 
      (
       [_name_] => IndexedPage 
       [id] => 1 
       [url] => http://blah.com/ 
       [hash] => 68a9f053b19526d08e36c6a9ad150737933816a5 
       [get_vars] => 
       [redirect] => 
       [created] => 1195055503 
       [updated] => 1195055503 
      ) 

     [1] => stdClass Object 
      (
       [_name_] => IndexedPage 
       [id] => 2 
       [url] => http://blah.com/ 
       [hash] => 68a9f053b19526d08e36c6a9ad150737933816a5 
       [get_vars] => 
       [redirect] => 
       [created] => 1195055503 
       [updated] => 1195055503 
      ) 

    ) 
関連する問題