如何在PHP中创建一个函数,根据其中一个键对数组进行排序

时间:2013-10-09 13:42:07

标签: php arrays function sorting

我有以下数组:

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

但我想创建一个我自己的功能,这可以做到这一点,这将对我有所帮助,让我更多地了解功能如何工作以及如何完成它们。

6 个答案:

答案 0 :(得分:9)

您正在寻找排序您的数组,但对于过滤它 - 感觉不同。

在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');

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:2)

如果您想自己编写该函数并且不使用现有的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/>';
}

答案 3 :(得分: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);

答案 4 :(得分:1)

function output($key, $criteria){
    foreach ($class as $val){
        if ($val[$key] == $criteria)
            echo $val['nume'].' '.$val['prenume'].'<br/>';
    }
}

您可以通过传递参数来调用此函数。例如:output('sex', 'm')。假设$class是全局变量。

答案 5 :(得分:1)

   $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 ($object as $val) 
{
if ($object['sex'] == 'm')
echo $object['nume'].'  '.$object['prenume'].' SEX is : '.$object['sex'].'<br/>';
}
哎呀刚刚看到这篇文章已经超过一年了......也许有人会觉得它很有用。