Это можно сделать, используя toolz.concat
или cytoolz.concat
(cythonized версия, которая в некоторых случаях может быть быстрее):
from cytoolz import concat
l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
list(concat(l)) # or just `concat(l)` if one only wants to iterate over the items
На моем компьютере, в python 3.6, это похоже на время почти так же быстро, как [item for sublist in l for item in sublist]
(не считая времени импорта):
In [611]: %timeit L = [item for sublist in l for item in sublist]
695 ns ± 2.75 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [612]: %timeit L = [item for sublist in l for item in sublist]
701 ns ± 5.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [613]: %timeit L = list(concat(l))
719 ns ± 12 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [614]: %timeit L = list(concat(l))
719 ns ± 22.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Версия toolz
действительно медленнее:
In [618]: from toolz import concat
In [619]: %timeit L = list(concat(l))
845 ns ± 29 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [620]: %timeit L = list(concat(l))
833 ns ± 8.73 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
просто замените его на mysqli_fetch_array
или mysqli_result::fetch_array
:)
while($row = $result->fetch_array())
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
Почти все функции mysql_*
имеют соответствующую функцию mysqli_*
..
Простое решение mysqli:
blockquote>$db = new mysqli('localhost','user','password','database'); $resource = $db->query('SELECT * FROM table WHERE 1'); while ( $rows = $resource->fetch_assoc() ) { print_r($rows);//echo "{$row['field']}"; } $resource->free(); $db->close();
С обработкой ошибок: если есть фатальная ошибка, скрипт завершится с сообщением об ошибке.
blockquote>// ini_set('display_errors',1); // Uncomment to show errors to the end user. if ( $db->connect_errno ) die("Database Connection Failed: ".$db->connect_error); $db = new mysqli('localhost','user','password','database'); $resource = $db->query('SELECT field FROM table WHERE 1'); if ( !$resource ) die('Database Error: '.$db->error); while ( $row = $resource->fetch_assoc() ) { echo "{$row['field']}"; } $resource->free(); $db->close();
Использование итераторов: добавлена поддержка PHP 5.4
blockquote>$db = new mysqli('localhost','user','password','database'); foreach ( $db->query('SELECT * FROM table') as $row ) { print_r($row);//echo "{$row['field']}"; } $db->close();
Извлечение одной записи: этот код не требует
blockquote>$db = new mysqli('localhost','user','password','database'); $resource = $db->query('SELECT field FROM table'); $row = $resource->fetch_assoc(); echo "{$row['field']}"; $resource->free(); $db->close();
Использование:
while ($row = $result->fetch_array(MYSQLI_BOTH)) {
// Look inside $row here, do what you want with it.
}
Посмотрите здесь на примеры ассоциативных массивов (также должны соответствовать версии fetch_array ()):
http: // php. нетто / ручной / EN / MySQLi-result.fetch-assoc.php