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

时间:2019-03-11 05:26:25

标签: php arrays multidimensional-array

这是一个数组,我需要从中排序部门名称,全名和薪水,其薪水在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']. ", ";


                            }
                    }

5 个答案:

答案 0 :(得分:1)

使用以下经过测试和正常工作的

$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 :(得分:0)

这是一个遍历数组的简单解决方案。

    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

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

答案 2 :(得分:0)

您的输入是嵌套数组。因此,您必须使用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)
          )
      )
)

答案 3 :(得分: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
        )

)

您需要做的第一件事是以某种方式处理主数组,该方法允许您仅保留所需的项目-这些项目需要存储在不同的(空)数组中(在这种情况下,{ {1}}。

在检测所需项目时,必须找出所有要排序的值-这可以同时完成。只是要创建一个新数组,该数组将仅包含您要排序的值(在这种情况下为$array_people)。

然后是简单的部分。接下来要做的是对数组进行排序。有一个bunch of functions,可以为您提供帮助。

我使用的功能($array_sortedasort)保留了项目的原始键,因此您可以通过对包含所有人员的数组进行排序>排序数组(请参见上面的代码)。

仅此而已,现在您有了一个由经过筛选和排序的人员组成的数组:) ...希望能对您有所帮助。

答案 4 :(得分: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>";


                                 }

                    }

                 }

输出将类似于(如果您使用table)

enter image description here