Я разрабатываю приложение 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]')"); }