如何在 codeigniter 或 php 中过滤数组

问题描述 投票:0回答:1

我有一个选项表

Option_ID | option_Type | Option_Text
----------|-------------|------------
1         | gender      | Male        
2         | gender      | Female      
3         | color       | black
4         | color       | white
5         | color       | red
6         | color       | blue

我正在将所有行发送到我的控制器。但我想过滤将数据库行加载为 option_type 的数组

我可以读书

foreach($optionList as $row){
    if ($row->gender){ echo "<option value='".$row->id."'>".$row->text."</opiton>}
}

但我不想要 if 语句。有没有办法在没有 if 语句的情况下过滤为颜色

php arrays codeigniter filter phplinq
1个回答
0
投票

如果我理解正确,您不介意在解决方案中使用 if 条件。 您只是不想在仅回显数组中的几行的同时进行不必要的迭代。

我看到您正在使用对象数组,您可以将其转换为数组或尝试解决任何阻塞对象的数组函数。

$options=array(
    array('Option_ID'=>1,'option_Type'=>'gender','Option_Text'=>'Male'),
    array('Option_ID'=>2,'option_Type'=>'gender','Option_Text'=>'Female'),
    array('Option_ID'=>3,'option_Type'=>'color','Option_Text'=>'black'),
    array('Option_ID'=>4,'option_Type'=>'color','Option_Text'=>'white'),
    array('Option_ID'=>5,'option_Type'=>'color','Option_Text'=>'red'),
    array('Option_ID'=>6,'option_Type'=>'color','Option_Text'=>'blue')
);

// collect all option_Type values, retain unique values, declare filter as $f
foreach(array_unique(array_column($options,"option_Type")) as $f){
    echo ucfirst($f),": <select name=$f>";
    foreach(array_filter($options,function($a)use($f){if($a["option_Type"]==$f)return $a;}) as $row){
        echo "<option value='",$row["Option_ID"],"'>",$row["Option_Text"],"</option>";
    }
    echo "</select><br><br>";
}

这将确保每次迭代都是有用的。 演示


非 LINQ 第二次尝试演示):

array_filter
似乎对我有用,将我的子数组转换为对象。

foreach(array_filter($options,function($a){return $a->option_Type=='gender';}) as $o){
    echo "{$o->Option_Text}<br>";
}

这不会浪费迭代并显示:

black
white
red
blue
© www.soinside.com 2019 - 2024. All rights reserved.