使用grep和map函数对哈希进行排序

时间:2018-12-06 11:07:46

标签: arrays perl hash grep

给出以下结构:

require_once 'self_class.php';
$user = new USER();

$under_id = "0";
$get_categories_main = $user->runQuery('SELECT * FROM category WHERE Under LIKE :under ORDER BY Id ASC ');
$get_categories_main->bindParam(':under',$under_id);
$get_categories_main->execute();
$len =$get_categories_main->rowCount();

while ($fetch_category_main = $get_categories_main->fetch(PDO::FETCH_ASSOC)) {
$category[] = $fetch_category_main;
}

if(isset($_GET['both'])){
echo "Both";
    for($x = 0; $x < $len; $x++) {
        echo $row = $category[$x]['Id'].") ".$category[$x]['Name']."<br />"; 
    }
}

echo "Main";
for($x = 0; $x < $len; $x++) {
    echo $row = $category[$x]['Id'].") ".$category[$x]['Name']."<br />"; 
}

编写一个基于此列表构建名称数组的程序。结果数组的原始大小写应包含全名(名字+姓氏),并应按姓氏/名字排序。排序时,必须忽略大写。 出于未知原因,我们不希望在列表中使用名为“琼斯”或“康纳”的人,因此应将其过滤掉。

这是我的要求,我需要使用grep,map和sort函数解决此问题。

1 个答案:

答案 0 :(得分:1)

哈希中的键和值都是名称。因此,从哈希中“构建名称数组”的最简单方法是:

my @names = %names;

但这不使用mapgrep。这样我们就可以(毫无意义地)添加它们。

my @names = grep { 1 } map { $_ } %names;

我认为,也许您应该更详细地说明您想要的东西。