2

我有以下数组:

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

但我想创建一个我自己的函数来做到这一点,这对我有很大帮助,让我更深入地了解函数是如何工作的以及应该如何完成它们。

4

6 回答 6

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');
于 2013-10-09T13:47:28.813 回答
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;
?>
于 2013-10-09T13:55:00.617 回答
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/>';
}
于 2013-10-09T13:57:15.067 回答
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);
于 2013-10-09T13:46:25.090 回答
1
function output($key, $criteria){
    foreach ($class as $val){
        if ($val[$key] == $criteria)
            echo $val['nume'].' '.$val['prenume'].'<br/>';
    }
}

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

于 2013-10-09T13:48:59.967 回答
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 比较:

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

哎呀,刚刚看到这篇文章已经有一年多了……也许有人会觉得它有用。

于 2015-03-02T20:06:05.190 回答