Как создать функцию в PHP, которая сортирует массив на основе одного из его ключей

У меня есть следующий массив:

$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/>'; } 

Но я хочу создать свою собственную функцию, которая может сделать именно это, что очень поможет мне и даст мне больше информации о том, как работают функции и как их следует выполнять.

Solutions Collecting From Web of "Как создать функцию в PHP, которая сортирует массив на основе одного из его ключей"

Вы ищете не для сортировки своего массива, а для его фильтрации – почувствуйте разницу.

В 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/>'; } 

Упс только что увидел, что эта почта была старше года … возможно, кто-то может найти ее полезной.