1
votes

Tableau multidimensionnel en PHP utilisant la boucle foreach

Voici un tableau à partir duquel je dois trier le nom du département, le nom complet et le salaire, dont le salaire est supérieur à 10000rs. Le tableau est:

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


                            }
                    }

Je suis totalement confus dans les boucles de foreach et je ne sais pas comment appeler chaque valeur du tableau.

Mon code me permet de n'afficher que les noms.

Puis-je savoir quelle est la meilleure façon d'imprimer et de travailler avec des tableaux multidimensionnels en PHP.

Mon code:

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
            )

    )

 )


2 commentaires

Dans ce cas, si vous n'avez pas besoin des informations de l'extrémité superficielle du tableau, vous voudrez peut-être aplatir le tableau et travailler avec cela.


que voulez-vous faire exactement avec ce tableau


5 Réponses :


2
votes

Utilisez ce qui suit, testé et fonctionnel

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
    )

)

Résultat: -

$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++;
    }
}


0 commentaires

1
votes

Voici une solution plus simple pour boucler sur les tableaux.

    Department: <department name>
    Employee: Raj
    Salary: 15000

Cela affichera ce que vous essayiez d'imprimer dans votre exemple.

Sortie pour le premier employé :

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

À l'avenir, vous devriez inclure les noms de département dans votre tableau d'exemple car votre exemple ne contient pas toutes les informations que vous essayez d'imprimer; impossible d'imprimer quelque chose qui n'existe pas.


3 commentaires

Comment allez-vous imprimer dep comme PHP ou FLEX selon le tableau donné en question.


Tu as raison. Je crois que j'ai manqué cette partie des exigences de la question.


j'y ai répondu ci-dessous, vous pouvez le référer



1
votes

Votre entrée est un tableau imbriqué. Vous devez donc utiliser foreach + for loop:

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

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

$ final_array print dep sage name & salaire qui est au maximum de 10000 Sortie:

$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']));
           }
        }
     }
}


0 commentaires

0
votes

Je ne sais pas, si je vous comprends bien, mais si vous avez besoin de filtrer toutes les personnes des sous-tableaux (PHP, Flex, System, ...) puis de les trier soit par leur nom ou salaire, vous pouvez le faire de cette manière ou d'une manière similaire:

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

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

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

)

Sortie:

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

La première chose que vous devez faire est de traiter le tableau principal d'une manière qui vous permette de ne conserver que les éléments que vous souhaitez - ces éléments doivent être stockés dans un tableau différent (vide) (dans ce cas $ array_people ).

Lors de la détection des éléments dont vous avez besoin, vous devez extraire toutes les valeurs selon lesquelles vous souhaitez trier - cela peut être fait en même temps. Il s'agit simplement de créer un nouveau tableau qui contiendra uniquement les valeurs par lesquelles vous allez trier (dans ce cas $array_sorted).

Ensuite vient la partie la plus facile. La prochaine chose à faire est de trier le tableau. Il existe un un ensemble de fonctions qui peuvent vous aider. p>

Les fonctions que j'ai utilisées ( asort et arsort ) conservent la clé d'origine de l'élément, vous pouvez donc trier le tableau contenant toutes les personnes par les clés du tableau trié (voir le code ci-dessus).

Et c'est tout, maintenant vous avez un tableau avec des personnes filtrées et triées :) ... espérons, ceci vous aide.


0 commentaires

0
votes

D'accord, après avoir lu tant de solutions, je pense personnellement que certaines d'entre elles sont totalement déroutantes pour un débutant, alors voici la solution que j'ai réellement implémentée, qui est totalement simple et facile à comprendre le flux d'un tableau multidimensionnel.

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


                                 }

                    }

                 }

La sortie sera comme, (si vous utilisez une table)

 entrez la description de l'image ici


0 commentaires