PHP foreach with multidimensional array
Rozwijam aplikację php, która używa klasy bazy danych do odpytywania mySQL.
Klasa jest tutaj: http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/
Zrobiłem kilka poprawek na klasie, aby dopasować się do moich potrzeb, ale jest problem (może głupi)
Podczas używania select () zwraca wielowymiarową tablicę, taką jak ta dla tabeli, która ma 3 cols (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 ) )
Teraz chcę, aby ta tablica była używana jako wynik mysql (mysql_fetch_assoc).
Wiem, że może być używana z foreach (), ale jest to z prostymi tablicami. więc myślę, że muszę ponownie zgłosić nową foreach () z każdym foreach (), ale myślę, że to może spowolnić lub spowodować większe obciążenie serwera.
Więc jak zastosować foreach() z tą wielowymiarową tablicą w najprostszy sposób?
Thanks
11 answers
Możesz użyć foreach tutaj dobrze.
foreach ($rows as $row) {
echo $row['id'];
echo $row['firstname'];
echo $row['lastname'];
}
Myślę, że jesteś przyzwyczajony do uzyskiwania dostępu do danych za pomocą wskaźników numerycznych (takich jak $row[0]
), ale nie jest to konieczne. Możemy użyć tablic asocjacyjnych, aby uzyskać dane, których szukamy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-20 15:29:46
Możesz użyć array_walk_recursive
:
array_walk_recursive($array, function ($item, $key) {
echo "$key holds $item\n";
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-20 15:38:51
To byłby komentarz pod odpowiedzią Brada, ale nie mam wystarczająco wysokiej reputacji.
Ostatnio odkryłem, że potrzebuję klucza tablicy wielowymiarowej, tzn. nie był to tylko indeks tablicy, w pętli foreach.
Aby to osiągnąć, możesz użyć czegoś bardzo podobnego do zaakceptowanej odpowiedzi, ale zamiast tego podziel klucz i wartość w następujący sposób
foreach ($mda as $mdaKey => $mdaData) {
echo $mdaKey . ": " . $mdaData["value"];
}
Mam nadzieję, że to komuś pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-06 01:12:09
Przykład z mysql_fetch_assoc()
:
while ($row = mysql_fetch_assoc($result))
{
/* ... your stuff ...*/
}
W Twoim przypadku z foreach
, za pomocą tablicy $result
otrzymujesz z select()
:
foreach ($result as $row)
{
/* ... your stuff ...*/
}
Jest tak samo, z odpowiednią iteracją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-20 15:29:52
W przypadku tablic w php pętla foreach jest zawsze ładnym rozwiązaniem.
W tym przypadku może to być na przykład:
foreach($my_array as $number => $number_array)
{
foreach($number_array as $data = > $user_data)
{
print "Array number: $number, contains $data with $user_data. <br>";
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-31 08:07:43
Holla / Hello , Mam! Możesz łatwo uzyskać nazwę pliku, tmp_name, file_size etc.So pokażę Ci, jak uzyskać nazwę pliku z linią kodu.
for ($i = 0 ; $i < count($files['name']); $i++) {
echo $files['name'][$i].'<br/>';
}
Jest testowany na moim komputerze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-20 12:05:26
Idealnie wielowymiarowa tablica jest zwykle tablicą tablic, więc pomyślałem, że zadeklaruję pustą tablicę, a następnie utwórz pary klucz i wartość z wyniku db w oddzielną tablicę, wreszcie wypchnij każdą tablicę utworzoną podczas iteracji do zewnętrznej tablicy. możesz zwrócić zewnętrzną tablicę w przypadku, gdy jest to osobne wywołanie funkcji. Hope that helps
$response = array();
foreach ($res as $result) {
$elements = array("firstname" => $result[0], "subject_name" => $result[1]);
array_push($response, $elements);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-20 08:01:55
Wiem, że to dość stara odpowiedź.
Oto szybsze rozwiązanie bez użycia foreach
:
Użyj array_column
print_r(array_column($array, 'firstname')); #returns the value associated with that key 'firstname'
Możesz również sprawdzić przed wykonaniem powyższej operacji
if(array_key_exists('firstname', $array)){
print_r(array_column($array, 'firstname'));
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-15 08:25:30
Czy normalny foreach nie da takiego samego wyniku jak mysql_fetch_assoc w Twoim przypadku?
Gdy używasz foreach na tej tablicy, otrzymujesz tablicę zawierającą te trzy klucze: 'id', 'firstname ' i'lastname'.
To powinno być to samo, co mysql_fetch_assoc dałoby (w pętli) dla każdego wiersza.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
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]')");
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-03 04:06:10
Uzyskanie szczegółów z każdej wartości w wielowymiarowej tablicy jest dość proste, gdy masz tablicę na miejscu. Więc to jest Tablica:
$example_array = array(
array('1','John','Smith'),
array('2','Dave','Jones'),
array('3','Bob','Williams')
);
Następnie użyj pętli foreach i przeprowadź tablicę Tak:
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....
}
Możesz echo co chcesz wokół niego, więc echo do Tabeli:
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>";
Powinno dać ci taką tabelę:
|1|John|Smith |
|2|Dave|Jones |
|3|Bob |Williams|
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-12 17:20:37