PDA

Pogčedajte punu verziju : Elegantnije filtriranje niza


Pedja
20. 07. 2007., 17:48
Treba mi da isfiltriram niz prema sadrzaju nekog od polaj u nizu. Napravio sam jednostavnu funkciju koja to radi ali mi se ne svidja pretrzivanje peske posto na vecem nizu to moze da pojede vreme. Moze li ovo bolje?

Evo koda i primera:



<?php

//
// filtrira niz $p_array, tako da vrati novi niz koji sadrzi samo
// elemente koji u polju $p_key_name imaju vrednost $p_value
//
function filterArray ($p_array, $p_value, $p_key_name) {

foreach ($p_array as $m_item) {
if ($m_item[$p_key_name] == $p_value) {
$m_result[] = $m_item;
}
}

return $m_result;
}



$m_data[0]['type'] = 'a';
$m_data[0]['name'] = 'data0';
$m_data[1]['type'] = 'b';
$m_data[1]['name'] = 'data0';
$m_data[2]['type'] = 'c';
$m_data[2]['name'] = 'data0';
$m_data[3]['type'] = 'a';
$m_data[3]['name'] = 'data0';
$m_data[4]['type'] = 'b';
$m_data[4]['name'] = 'data0';
$m_data[5]['type'] = 'c';
$m_data[5]['name'] = 'data0';
$m_data[6]['type'] = 'a';
$m_data[6]['name'] = 'data0';
$m_data[7]['type'] = 'b';
$m_data[7]['name'] = 'data0';
$m_data[8]['type'] = 'c';
$m_data[8]['name'] = 'data0';
$m_data[9]['type'] = 'a';
$m_data[9]['name'] = 'data0';


$m_data_a = filterArray ($m_data, 'a', 'type');
$m_data_b = filterArray ($m_data, 'b', 'type');
$m_data_c = filterArray ($m_data, 'c', 'type');

print_r ($m_data_a);
echo "<br>";
print_r ($m_data_b);
echo "<br>";
print_r ($m_data_c);
echo "<br>";

?>

dee
20. 07. 2007., 17:56
moze ovako:

http://www.php.net/manual/en/function.array-filter.php

Pedja
20. 07. 2007., 18:23
Znam za to, ali je ovde kvaka sto treba da se proslede parametri koji su kljuc za filtriranje a array_filer ocekuje callbackfunkciju koja unapred zna sta treba da radi.

dee
20. 07. 2007., 19:10
$m_data=array();
$m_data[0]['type'] = 'a';
$m_data[0]['name'] = 'data0';
$m_data[1]['type'] = 'b';
$m_data[1]['name'] = 'data0';
$m_data[2]['type'] = 'c';
$m_data[2]['name'] = 'data0';
$m_data[3]['type'] = 'a';
$m_data[3]['name'] = 'data0';
$m_data[4]['type'] = 'b';
$m_data[4]['name'] = 'data0';
$m_data[5]['type'] = 'c';
$m_data[5]['name'] = 'data0';
$m_data[6]['type'] = 'a';
$m_data[6]['name'] = 'data0';
$m_data[7]['type'] = 'b';
$m_data[7]['name'] = 'data0';
$m_data[8]['type'] = 'c';
$m_data[8]['name'] = 'data0';
$m_data[9]['type'] = 'a';
$m_data[9]['name'] = 'data0';


print_r(array_filter($m_data, create_function('$nesto', 'return ($nesto[type]=="a") ? 1 : 0;')));

Pedja
20. 07. 2007., 23:02
Krvavo :)