У меня есть следующий массив:
$class = array( 'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23), 'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27), 'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22), 'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23), 'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25) );
То, что я хотел бы сделать, – создать функцию, которая может сортировать этот массив на основе одного из его ключей, например, я хочу, чтобы функция сортировала и выводила всех мужчин ('sex' => 'm') из массива ,
Мне удалось сделать это с помощью:
foreach ($class as $val) { if ($val['sex'] == 'm') echo $val['nume'].' '.$val['prenume'].'<br/>'; }
Но я хочу создать свою собственную функцию, которая может сделать именно это, что очень поможет мне и даст мне больше информации о том, как работают функции и как их следует выполнять.
Вы ищете не для сортировки своего массива, а для его фильтрации – почувствуйте разницу.
В PHP для этого используется array_filter () . Если вы хотите создать гибкую функцию, вы можете действовать следующим образом:
function filterArray($data, $key, $value) { return array_filter($data, function($row) use ($key, $value) { return $row[$key]==$value; }); } $class = array( 'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23), 'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27), 'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22), 'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23), 'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25) ); $result = filterArray($class, 'sex', 'm');
function output($key, $criteria){ foreach ($class as $val){ if ($val[$key] == $criteria) echo $val['nume'].' '.$val['prenume'].'<br/>'; } }
Вы можете вызвать эту функцию, передав параметр. Например: output('sex', 'm')
. Предположим, что $class
является глобальной переменной.
Попробуй это:
<?php function array_sort($array,$search_key,$search_val){ $re_array = array(); foreach($array as $value){ if($value[$search_key] == $search_val) $re_array[] = $value; } return $re_array; } $class = array( 'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23), 'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27), 'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22), 'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23), 'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25) ); $data = array_sort($class,'sex','m'); echo "<pre>"; print_r($data); echo "</pre>"; exit; ?>
Если вы хотите написать функцию самостоятельно и не использовать существующую функцию array_filter , вы можете сделать следующее:
findAll($array, $key, $value) { $result = array() foreach ($array as $val) { if ($val[$key] == $value) { $result[] = $val; } } }
и назовите его, как findAll($class, "sex", "m")
. Он вернет массив результатов, который вы можете отобразить, как вы уже сделали:
$filteredArray = findAll($class, "sex", "m") foreach ($filteredArray as $item) { echo $item['nume'].' '.$item['prenume'].'<br/>'; }
1. Вы можете использовать функцию user_filter .
function filterSex($row){ return $row['sex'] == 'm'; } $newArray = array_filter($class, "filterSex");
2. Или вы можете перебирать массив самостоятельно:
function filterSex($array){ $result = array(); foreach ($array in $row){ if ($row['sex'] == 'm'){ $result[] = $row; } } return $result; } $newArray = filterSex($class);
$class = array( array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23), array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27), array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22), array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23), array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25) ); $object = json_decode(json_encode($class), FALSE);
после этого вы можете сделать свой выбор foreach так:
foreach ($object as $val) { if ($object['sex'] == 'm') echo $object['nume'].' '.$object['prenume'].' SEX is : '.$object['sex'].'<br/>'; }
Упс только что увидел, что эта почта была старше года … возможно, кто-то может найти ее полезной.