php foreach с многомерным массивом

Я разрабатываю приложение php, которое использует класс базы данных для запроса mySQL.

класс находится здесь: http://net.tutsplus.com/tutorials/php/real-world-oop-with-php-and-mysql/

Я сделал некоторые изменения в классе, чтобы соответствовать моим потребностям, но есть проблема (может быть, глупая)

При использовании select () он возвращает многомерный массив, подобный таковому для таблицы с тремя столбцами (id, firstname, lastname):

 массив
 (
     [0] => Массив
         (
             [id] => 1
             [firstname] => Firstname one
             [lastname] => Lastname one
         )

     [1] => Массив
         (
             [id] => 2
             [firstname] => Имя два
             [lastname] => Lastname two
         )

     [2] => Массив
         (
             [id] => 3
             [firstname] => Имя три
             [lastname] => Lastname три
         )
 )

Теперь я хочу, чтобы этот массив использовался как результат mysql (mysql_fetch_assoc).

Я знаю, что он может использоваться с foreach (), но это с простыми массивами. поэтому я думаю, что мне нужно обновить новый foreach () с каждым foreach (), но я думаю, что это может замедлить или вызвать некоторую более высокую нагрузку на сервер.

Итак, как применить foreach () с этим многомерным массивом самый простой способ?

благодаря

Вы можете использовать foreach здесь просто отлично.

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

Я думаю, вы привыкли к доступу к данным с числовыми знаками (например, $row[0] ), но это необязательно. Мы можем использовать ассоциативные массивы для получения данных, которые нам нужны.

Вы можете использовать array_walk_recursive :

 array_walk_recursive($array, function ($item, $key) { echo "$key holds $item\n"; }); 

Это было бы замечанием по поводу ответа Брэда, но у меня недостаточно высокая репутация.

Недавно я обнаружил, что мне нужен ключ многомерного массива, т. Е. Он был не просто индексом для массива в цикле foreach.

Чтобы достичь этого, вы можете использовать что-то очень похожее на принятый ответ, но вместо этого разделите ключ и значение следующим образом

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

Надежда помогает кому-то.

Пример с mysql_fetch_assoc() :

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

В вашем случае с foreach , с массивом $result вы получаете от select() :

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

Это очень похоже на правильную итерацию.

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

 $response = array(); foreach ($res as $result) { $elements = array("firstname" => $result[0], "subject_name" => $result[1]); array_push($response, $elements); } 

С массивами в php цикл foreach всегда является довольно хорошим решением.
В этом случае это может быть, например:

 foreach($my_array as $number => $number_array) { foreach($number_array as $data = > $user_data) { print "Array number: $number, contains $data with $user_data. <br>"; } } 

Чтобы получить детали из каждого значения в многомерном массиве, достаточно просто, как только у вас будет массив. Итак, это массив:

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

Затем используйте цикл foreach и пропустите массив таким образом:

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

Вы можете повторять все, что вам нравится вокруг, чтобы эхо в таблицу:

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

Должна дать вам такую ​​таблицу:

 |1|John|Smith | |2|Dave|Jones | |3|Bob |Williams| 

Холла / Привет , я понял! Вы можете легко получить имя файла, tmp_name, file_size и т. Д. Поэтому я покажу вам, как получить имя файла с помощью строки кода.

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

Он протестирован на моем ПК.

Я знаю, что это довольно старый ответ. Вот более быстрое решение без использования foreach :

Использовать array_column

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

Также вы можете проверить перед выполнением вышеуказанной операции

 if(array_key_exists('firstname', $array)){ print_r(array_column($array, 'firstname')); } 

Не будет ли нормальный foreach в основном давать тот же результат, что и mysql_fetch_assoc в вашем случае?

при использовании foreach в этом массиве вы получите массив, содержащий эти три ключа: «id», «firstname» и «lastname».

Это должно быть таким же, как mysql_fetch_assoc будет давать (в цикле) для каждой строки.

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