2009-07-03 4 views
2

特定の国のすべての互換性のある電話機を取得するためのクエリがあります。私のコントローラでは、Unidy結果配列を単なる製品名の配列に縮小するためにSet :: extractを使用しています。CakePHPで私のビューに送る前にアレイの操作にコントローラのSet ::機能を使う方法は?

$ results = $ this-> Country-> compatiblePhones($ country);
$ compatiblePhones =セット::抽出( '/ p/product_name'、$結果);
$ this-> set( 'compatiblePhones'、$ compatiblePhones);これ

Array 
(
    [0] => Array 
     (
      [p] => Array 
       (
        [product_name] => Bat Phone 
       ) 

     ) 

    [1] => Array 
     (
      [p] => Array 
       (
        [product_name] => Premium Phone 
       ) 

     ) 

    [2] => Array 
     (
      [p] => Array 
       (
        [product_name] => Brick Phone 
       ) 

     ) 
    [3] => Array 
     (
      [p] => Array 
       (
        [product_name] => Satellite Phone 
       ) 

     ) 

) 

:私は私のビューにこの配列を渡し、アレイ内の各電話のリンクを示すコードのビットを有する

Array 
(
    [0] => Bat Phone 
    [1] => Premium Phone 
    [2] => Brick Phone 
    [3] => Satellite Phone 
) 

抽出物は、この結果を体裁が整い。

<ul> 
    <?php echo (in_array("Bat Phone", $compatiblePhones)) ? '<li><a href="#">Bat Phone</a></li>' : '' ;?> 
    <?php echo (in_array("Premium Phone", $compatiblePhones)) ? '<li><a href="#">Premium Phone</a></li>' : '' ;?> 
    <?php echo (in_array("Brick Phone", $compatiblePhones)) ? '<li><a href="#">Brick Phone</a></li>' : '' ;?> 
    <?php echo (in_array("Satellite Phone", $compatiblePhones)) ? '<li><a href="#">Satellite Phone</a></li>' : '' ;?> 
</ul> 

これは私の問題です。衛星電話は常に動作するように返されますしかし、他の電話機がまったく動作しない場合にのみ、それを排他的に表示したいと思っています。私はビュー側ではin_array()を使ってこれを行うことができると思いますが、それはそれほど面倒です。

コントローラにSet ::機能を使用してビューを送信するにはどうすればできますか?また、配列に正確な正しい電話が含まれている場合は、乱雑なin_array()設定ではなく、私の見解でそれらをforeachすることができます。

ありがとうございます。名前は、常に「衛星電話」になることを知っていればまあ

答えて

6

は:

$otherPhones = Set::extract('/p[product_name!=Satellite Phone]/product_name', $results); 

衛星電話を除き、あなたはすべての携帯電話を取得します。あなたはそれが常に「衛星電話」になることがわかっている場合は、あなただけのデータベースからそれをフェッチすることはできません、それははるかに効率的になり、

<ul> 
<?php 
foreach (/* loop through "other" phones */) 
{ 
    // echo them 
} 

if (empty($otherPhones)) 
{ 
    // echo the satellite phone 
} 
?> 
</ul> 

をしかし、私は考えます..:次に、あなたのビューでこれを行うことができます

関連する問題