php foreach avec tableau multidimensionnel

je développe une application php qui utilise une classe de base de données pour interroger mySQL.

la classe est ici: http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/

j'ai fait quelques retouches sur la classe pour répondre à mes besoins, mais il y a un problème (peut-être un problème stupide)

en utilisant select () il retourne un tableau multidimensionnel comme celui d'une table qui a 3 colonnes (id, firstname, lastname):

Array
(
    [0] => Array
        (
            [id] => 1
            [firstname] => Firstname one
            [lastname] => Lastname one
        )

    [1] => Array
        (
            [id] => 2
            [firstname] => Firstname two
            [lastname] => Lastname two
        )

    [2] => Array
        (
            [id] => 3
            [firstname] => Firstname three
            [lastname] => Lastname three
        )
)

maintenant je veux ceci tableau à utiliser comme résultat mysql (mysql_fetch_assoc).

je sais qu'il peut être utilisé avec foreach (), mais c'est avec de simples tableaux. donc je pense que je dois re-écl arer un nouveau foreach() avec chaque foreach(), mais je pense que cela pourrait ralentir ou causer une charge plus élevée du serveur.

alors comment appliquer foreach () avec ce tableau multidimensionnel de la manière la plus simple?

Merci

42
demandé sur bpeterson76 2011-06-20 19:24:17

11 réponses

vous pouvez utiliser foreach ici très bien.

foreach ($rows as $row) {
    echo $row['id'];
    echo $row['firstname'];
    echo $row['lastname'];
}

je pense que vous avez utilisé pour accéder aux données numériques indicies ($row[0]), mais ce n'est pas nécessaire. Nous pouvons utiliser tableaux associatifs pour obtenir les données que nous sommes après.

92
répondu Brad 2011-06-20 15:29:46

Vous pouvez utiliser array_walk_recursive:

array_walk_recursive($array, function ($item, $key) {
    echo "$key holds $item\n";
});
12
répondu Karolis 2011-06-20 15:38:51

Cela aurait été un commentaire sous l'Brad réponse, mais je n'ai pas une assez grande réputation.

récemment, j'ai découvert que j'avais aussi besoin de la clé du tableau multidimensionnel, c'est-à-dire qu'il ne s'agissait pas seulement d'un index pour le tableau, dans la boucle foreach.

pour y parvenir, vous pouvez utiliser quelque chose de très similaire à la réponse acceptée, mais au lieu de diviser la clé et la valeur comme suit

foreach ($mda as $mdaKey => $mdaData) {
    echo $mdaKey . ": " . $mdaData["value"];
}

j'Espère que l'aide à quelqu'un.

3
répondu arvy3 2014-11-06 01:12:09

Exemple mysql_fetch_assoc():

while ($row = mysql_fetch_assoc($result))
{
    /* ... your stuff ...*/
}

dans votre cas avec foreach, le $result array vous obtenez à partir de select():

foreach ($result as $row)
{
    /* ... your stuff ...*/
}

c'est à peu près la même chose, avec une itération appropriée.

2
répondu aorcsik 2011-06-20 15:29:52

avec les tableaux en php, la boucle foreach est toujours une jolie solution.

Dans ce cas, il pourrait être par exemple:

foreach($my_array as $number => $number_array)
    {
    foreach($number_array as $data = > $user_data)
        {
            print "Array number: $number, contains $data with $user_data.  <br>";
        }
    }
2
répondu nao_de_naoned 2015-03-31 08:07:43

Holla / Hello, Je l'ai eu! Vous pouvez facilement obtenir le nom de fichier,tmp_name,taille_fichier etc.Donc je vais vous montrer comment obtenir le nom de fichier avec une ligne de code.

for ($i = 0 ; $i < count($files['name']); $i++) {
    echo $files['name'][$i].'<br/>';
}

il est testé sur mon PC.

2
répondu Asraful Haque 2016-06-20 12:05:26

idéalement, un tableau multidimensionnel est habituellement un tableau de tableaux alors j'ai pensé déclarer un tableau vide, puis créer des paires de clés et de valeurs à partir du résultat db dans un tableau séparé, finalement pousser chaque tableau créé sur itération dans le tableau extérieur. vous pouvez retourner le tableau extérieur dans le cas où il s'agit d'un appel de fonction séparé. Hope qui aide

$response = array();    
foreach ($res as $result) {
        $elements = array("firstname" => $result[0], "subject_name" => $result[1]);
        array_push($response, $elements);
    }
1
répondu Poly 2015-02-20 08:01:55

je sais que c'est une vieille réponse. Voici une solution plus rapide sans utiliser foreach:

Utiliser array_column

print_r(array_column($array, 'firstname')); #returns the value associated with that key 'firstname'

vous pouvez également vérifier avant d'exécuter l'opération ci-dessus

if(array_key_exists('firstname', $array)){
   print_r(array_column($array, 'firstname'));
}
1
répondu Akintunde-Rotimi 2017-05-15 08:25:30

un foreach normal ne donnerait-il pas le même résultat qu'un mysql_fetch_assoc dans votre cas?

en utilisant foreach sur ce tableau, vous obtiendriez un tableau contenant ces trois clés: 'id', 'firstname'et ' lastname'.

Que doit être le même que mysql_fetch_assoc donnerait (dans une boucle) pour chaque ligne.

0
répondu Yhn 2011-06-20 15:28:34
foreach ($parsed as $key=> $poke)
{
    $insert = mysql_query("insert into soal 
                          (pertanyaan, a, b, c, d, e, jawaban)
                          values
                          ('$poke[question]',
                          '$poke[options][A]',
                          '$poke[options][B]',
                          '$poke[options][C]',
                          '$poke[options][D]',
                          '$poke[options][E]',
                          '$poke[answer]')");
}
0
répondu endip 2012-12-03 04:06:10

pour obtenir des détails hors de chaque valeur dans un tableau multidimensionnel est assez simple une fois que vous avez votre tableau en place. C'est donc le tableau:

$example_array = array(
array('1','John','Smith'),
array('2','Dave','Jones'),
array('3','Bob','Williams')
);

alors utilisez une boucle foreach et faites passer le tableau comme ceci:

foreach ($example_array as $value) {
echo $value[0]; //this will echo 1 on first cycle, 2 on second etc....
echo $value[1]; //this will echo John on first cycle, Dave on second etc....
echo $value[2]; //this will echo Smith on first cycle, Jones on second etc....
}

Vous pouvez l'écho de ce que vous voulez autour d'elle, afin de faire écho dans une table:

echo "<table>"
    foreach ($example_array as $value) {
    echo "<tr><td>" . $value[0] . "</td>";
    echo "<td>" . $value[1] . "</td>";
    echo "<td>" . $value[2] . "</td></tr>";
    }
echo "</table>";

Devrait vous donner un tableau comme ceci:

|1|John|Smith   |
|2|Dave|Jones   |
|3|Bob |Williams|
0
répondu Rmj86 2016-06-12 17:20:37