PHP中使用foreach循环的多维数组

3

这里有一个数组,我需要筛选出部门名称、全名和工资,而其工资要高于10000卢比。 该数组为:

Array
 (
 [PHP] => Array
    (
        [0] => Array
            (
                [name] => Jay
                [salary] => 8000
            )

        [1] => Array
            (
                [name] => Raj
                [salary] => 15000
            )

        [2] => Array
            (
                [name] => Mihir
                [salary] => 12000
            )

    )

[Flex] => Array
    (
        [0] => Array
            (
                [name] => Vijay
                [salary] => 14000
            )

    )

[System] => Array
    (
        [0] => Array
            (
                [name] => Kishan
                [salary] => 5000
            )

    )

 )

我完全在 foreach 循环的嵌套中感到困惑,不知道如何从数组中调用每个值。

我的代码只能显示名称。

我可以知道在 PHP 中打印和处理多维数组的最佳方法吗。

我的代码:

  foreach($newArray as $x=>$x_value){

                        foreach ($x_value as $y=> $y_value){
                                 if($y_value['salary']>10000)                                    
                                echo $y_value['name']." has ". $y_value['salary']. ", ";


                            }
                    }

在这种情况下,如果您不需要数组的浅层信息,则可能希望将数组展平并使用展平后的数组进行操作。 - user3647971
你想用这个数组做什么? - Devi A
5个回答

3

使用以下经过测试并且有效的内容:

最初的回答

$filterArray = array();
$i           = 0;
foreach($salary as $dept => $employee){
    foreach($employee as $index => $data){
        if($data['salary'] > 10000){
            $filterArray[$i]['deprtment'] = $dept;
            $filterArray[$i]['name']      = $data['name'];
            $filterArray[$i]['salary']    = $data['salary'];
        }
        $i++;
    }
}

结果:

最初的回答
Array
(
[1] => Array
    (
        [deprtment] => PHP
        [name] => Raj
        [salary] => 15000
    )

[2] => Array
    (
        [deprtment] => PHP
        [name] => Mihir
        [salary] => 12000
    )

[3] => Array
    (
        [deprtment] => Flex
        [name] => Vijay
        [salary] => 14000
    )

)

1
这里有一个更简单的解决方案,用于遍历数组。
foreach ($bigArray as $department => $employees) {
    foreach ($employees as $employee) {
        if ($employee["salary"] > 10000) {
            echo "Department: " . $department;
            echo "Employee: " . $employee;
            echo "Salary: " . $salary;
        } else {
            echo $person . " has no money.";
        }
    }
}

这将输出你在示例中尝试打印的内容。
第一个员工的输出:
Department: <department name>
Employee: Raj
Salary: 15000

在未来,您应该在示例数组中包括部门名称,因为您的示例没有您要打印的所有信息;我们无法打印不存在的内容。

你将如何根据所给的数组打印像PHP或FLEX这样的dep? - Dhruv Thakkar
你说得对。我相信我错过了问题要求的那部分。 - Kyle Nakamura
我已经在下面回答了,您可以参考。 - Dhruv Thakkar

1

您输入的是嵌套数组。因此,您需要使用foreach + for循环:

$final_array = array();
foreach($newArray as $x=>$x_value)
{
     foreach ($i=0;$i<count($x_value);$i++)
     {
        if($x_value[$i]['salary']>10000)                                  
        {
           if(isset($final_array[$x]))
           {
              array_push($final_array[$x],array("name"=>$x_value[$i]['name'],"salary"=>$x_value[$i]['salary']));
           }
           else
           {
              $final_array[$x] = array();
              array_push($final_array[$x],array("name"=>$x_value[$i]['name'],"salary"=>$x_value[$i]['salary']));
           }
        }
     }
}

输出:$final_array 按部门打印姓名和薪水,薪水高于10000

Array
(
[PHP] => Array
    (
     [0]=> Array
        (
          [name] => Raj
          [salary] => 15000
        )
     [1]=> Array
        (
          [name] => Mihir
          [salary] => 12000
        )
    )

[Flex] => Array
      (
       [0]=> Array
          (
            [name] => Vijay
            [salary] => 14000)
          )
      )
)

0

好的,在阅读了许多解决方案之后,我个人认为其中一些对于新手来说完全令人困惑,因此这里是我实际实现的解决方案,它非常简单,易于理解多维数组的流程。

  foreach($newArray as $x=>$x_value){

                        foreach ($x_value as $y=> $y_value){
                                 if($y_value['salary']>10000){     

                                echo "<tr>";
                                        echo "<td>"; echo $y_value['name'];  echo "</td>";
                                        echo "<td>"; echo $x;  echo "</td>";
                                        echo "<td>"; echo $y_value['salary'];  echo "</td>";

                                echo "</tr>";


                                 }

                    }

                 }

输出将会是这样的(如果您使用表格)

enter image description here


0

我不确定我是否理解正确,但如果您需要从子数组(PHP、Flex、System等)中过滤出所有人员,然后按照姓名或薪水进行排序,您可以使用以下方式或类似方式实现:

$array = [
    'PHP' => [
        [
            'name' => 'Jay',
            'salary' => 8000
        ],
        [
            'name' => 'Raj',
            'salary' => 15000
        ],
        [
            'name' => 'Mihir',
            'salary' => 12000
        ]
    ],
    'Flex' => [
        [
            'name' => 'Vijay',
            'salary' => 14000
        ]
    ],
    'System' => [
        [
            'name' => 'Kishan',
            'salary' => 5000
        ]
    ]
];

$array_people = [];
$array_sorted = [];
$sort_by = 'name'; // Array key name
$sort_desc = false;
$min_salary = 10000;

foreach ($array as $type => $people)
{
    foreach ($people as $info)
    {
        if ($info['salary'] >= $min_salary) {
            $array_sorted[] = $info[$sort_by];
            $array_people[] = $info;
        }
    }
}

if ($sort_desc) {
    // Sort descending
    arsort($array_sorted);
} else {
    // Sort ascending
    asort($array_sorted);
}

$array_final = [];

foreach (array_keys($array_sorted) as $index)
{
    $array_final[] = $array_people[$index];
}

print_r($array_final);

输出:

Array
(
    [0] => Array
        (
            [name] => Mihir
            [salary] => 12000
        )

    [1] => Array
        (
            [name] => Raj
            [salary] => 15000
        )

    [2] => Array
        (
            [name] => Vijay
            [salary] => 14000
        )

)

首先,你需要以一种方式处理主数组,使你只保留想要的项目 - 这些项目需要存储在另一个(空)数组中(在这种情况下是$array_people)。

在检测所需项目时,你需要获取所有想要排序的值 - 这可以同时完成。只需创建一个新数组,其中仅包含你将按其排序的值(在此情况下为$array_sorted)。

然后就是更容易的部分。下一步要做的是对数组进行排序。有一堆函数可以帮助你完成这个任务。

我使用的函数(asortarsort)保留了项目的原始键,因此你可以通过已排序数组的来对包含所有人的数组进行排序(请参见上面的代码)。

这就是全部内容,现在你拥有一个经过筛选和排序的人员数组 :) ... 希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接