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

私がやりたいことは、キーの 1 つに基づいてこの配列をソートできる関数を作成することです。たとえば、配列からすべての男性 ('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 に答える