Как мне отфильтровать массив в codeigniter или переполнение стека

У меня есть таблица опций

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

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>";
}

Это обеспечит полезность каждой итерации. демонстрация


Non-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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]