Многомерный массив в PHP с использованием цикла foreach - PullRequest
1 голос
/ 11 марта 2019

Вот массив, из которого мне нужно отсортировать название отдела, полное имя и зарплату, чья зарплата выше 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']. ", ";


                            }
                    }

Ответы [ 5 ]

1 голос
/ 11 марта 2019

Используйте следующее, протестировано и работает

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

)
0 голосов
/ 11 марта 2019

Хорошо, прочитав так много решений, я лично считаю, что некоторые из них совершенно сбивают с толку новичка, поэтому вот решение, которое я на самом деле реализовал, которое абсолютно просто и легко для понимания потока многомерного массива.

  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 голосов
/ 11 марта 2019

Не знаю, правильно ли я вас понял, но если вам нужно отфильтровать всех людей из под-массивов (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).

Затем наступит более легкая часть.Следующее, что нужно сделать, это отсортировать массив.Существует набор функций , которые могут помочь вам в этом.

Используемые мной функции (asort и arsort) сохраняют оригинальный ключ элемента,так что вы можете отсортировать массив, содержащий всех людей, по ключам отсортированного массива (см. код выше).

И это все, теперь у вас есть массив с фильтрацией и сортировкойлюди :) ... надеюсь, это поможет вам.

0 голосов
/ 11 марта 2019

Ваш вход - вложенный массив. Поэтому вы должны использовать foreach + for loop:

$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 голосов
/ 11 марта 2019

Вот более простое решение для зацикливания массивов.

    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

В будущем вы должны включить названия отделов в ваш массив примеров, поскольку в вашем примере нет всей информации, которую вы пытаетесь распечатать;не может напечатать то, что не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...