在将它发送到CakePHP中的视图之前,我如何使用控制器中的Set :: function来操作数组?

Chr*_*len 2 arrays cakephp

我有一个查询来获取特定国家/地区的所有兼容手机,而在我的控制器中,我使用Set :: extract将不整洁的结果数组减少为一系列产品名称.

$ results = $ this-> Country-> compatiblePhones($ country);
$ compatiblePhones = Set :: extract('/ p/product_name',$ results);
$这- >置( '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
                )

        )

)
Run Code Online (Sandbox Code Playgroud)

对此:

Array
(
    [0] => Bat Phone
    [1] => Premium Phone
    [2] => Brick Phone
    [3] => Satellite Phone
)
Run Code Online (Sandbox Code Playgroud)

我将此数组传递给我的视图,并有一些代码显示数组中每个手机的链接:

<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>
Run Code Online (Sandbox Code Playgroud)

这是我的问题:卫星电话总是会被返回,因为它可以在任何地方工作,但我只想让它独占显示,如果其他电话都没有工作.我想我可以在视图方面使用in_array()来做到这一点,但它的内容非常混乱.

在将数组发送到视图之前,我如何使用控制器中的Set ::功能来操作数组?我还考虑过,如果数组包含完全正确的手机,我可以在我的视图中预测它们,而不是设置凌乱的in_array().

谢谢.

dr *_*ter 6

好吧,如果你知道这个名字将永远是"卫星电话":

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

除了卫星电话之外,你会得到所有的电话.然后你可以在你的视图中执行此操作:

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

if (empty($otherPhones))
{
    // echo the satellite phone
}
?>
</ul>
Run Code Online (Sandbox Code Playgroud)

但我想,如果你知道它将永远是"卫星电话",你就不能从数据库中获取它,它会更有效率.