How to create a function in PHP that sorts an array based on one of its keys

I have the following 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)
);

What I would like to do is create a function that can sort this array based on one of its keys, for example, I want the function to sort and output all men ('sex' => 'm'). from an array.

I managed to do this with

foreach ($class as $val) {
    if ($val['sex'] == 'm')
    echo $val['nume'].' '.$val['prenume'].'<br/>';
}

But I want to create my own function that can do just that, which will help me a lot and give me more information about how the functions work and how they should be performed.

+2
source share
6 answers

You are looking not to sort your array, but to filter it - feel the difference.

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');
+8
function output($key, $criteria){
    foreach ($class as $val){
        if ($val[$key] == $criteria)
            echo $val['nume'].' '.$val['prenume'].'<br/>';
    }
}

, . : output('sex', 'm'). , $class - .

+1

:

<?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;
?>
+1

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

1. array_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);
0
   $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/>';
}

Oops, I just saw that this post was older than a year ... maybe this might seem useful to someone.

0
source

All Articles