繁体   English   中英

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

[英]Multidimensional array in PHP using foreach loop

这是一个数组,我需要从中整理出部门名称,全名和薪水,其薪水在10000rs以上。 数组是:

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']. ", ";


                            }
                    }

使用以下,测试和工作

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

)

这是循环数组的更简单的解决方案。

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

将来,您应该在示例数组中包含部门名称,因为您的示例没有您尝试打印的所有信息; 我们不能打印不存在的东西。

您的输入是嵌套数组。 所以你必须使用 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)
          )
      )
)

我不知道,如果我对你的理解正确,但是如果你需要从子数组(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 )保留了项目的原始键,因此您可以通过排序数组的对包含所有人的数组进行排序(请参阅上面的代码)。

就是这样,现在你有一个包含过滤和排序的人的数组:) ...希望,这对你有帮助。

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

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


                                 }

                    }

                 }

输出将是这样的,(如果你使用 table )

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM