我有一个查询来获取特定国家/地区的所有兼容手机,而在我的控制器中,我使用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().
谢谢.
好吧,如果你知道这个名字将永远是"卫星电话":
$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)
但我想,如果你知道它将永远是"卫星电话",你就不能从数据库中获取它,它会更有效率.