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
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.
Vous pouvez utiliser array_walk_recursive
:
array_walk_recursive($array, function ($item, $key) {
echo "$key holds $item\n";
});
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.
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.
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>";
}
}
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.
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);
}
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'));
}
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.
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]')");
}
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|