Bir projemde iki boyutlu dizi içinde birden fazla parametreli arama yapmam gerekiyordu onu için basit bir kod yazdım.İhtiyacı olabilecekler için paylaşmak istiyorum
İstediğiniz şekilde geliştirebilirsiniz. Mesela and ve or mantığını tek bir fonksiyonda yapılabilir fakat bu kadarı benim işimi gördüğü için uğraşmadım.
Dizi içeriği
[id] => 28 [name] => Bakım Ürünleri [parent] => 0 [id] => 29 [name] => Kozmetik [parent] => 0 [id] => 30 [name] => Parfüm [parent] =>29
// fetchAllAnd fonksiyonu
// Çalışma koşulu tüm parametre şartları karşılanmalıdır sqldeki where koşulundaki and mantığı diyebiliriz
// fields parametresi dönmesini istediğiniz key değerleri
// $datas dizisi kaynak dizimiz
// $params koşulumuz
// Örnekteki şartımız dizi elemanının parent değeri 0 ve id si 28 olan kayıtları listeler
public function fetchAllAnd($fields=array(), $datas, $params=array())
{
$values = [];
$pCount = sizeof($params);
foreach ($datas as $key => $data) {
$cond = 0;
foreach ($params as $param_field =>$value) {
if ( $data[$param_field] == $value ) {
$cond++;
}
}
if ($cond == $pCount) {
foreach ($params as $param_field =>$value) {
if ( $data[$param_field] == $value ) {
foreach ($fields as $f =>$field) {
$values[$key][$field] = $data[$field];
}
}
}
}
}
return $values;
}
// fetchAllOr fonksiyonu
// Çalışma koşulu: parametrelerden herhangi bir tanesi karşılanmalıdır, sqldeki where koşulundaki or mantığı diyebiliriz
// fields parametresi dönmesini istediğiniz key değerleri
// $datas dizisi kaynak dizimiz
// $params koşulumuz
// Örnekteki şartımız dizi elemanının parent değeri 0 veya id si 28 olan kayıtları listeler
fetchAllOr(['name','parent','id'],$datas,['parent'=>'0','id'=>'28']));
public function fetchAllOr($fields=array(), $datas, $params=array())
{
$values = [];
foreach ($datas as $key => $data) {
foreach ($params as $param_field =>$value) {
if ( $data[$param_field] == $value ) {
foreach ($fields as $f =>$field) {
$values[$key][$field] = $data[$field];
}
}
}
}
return $values;
}