2016-09-12 6 views
0

У меня есть простой кусок кода:PHP PDO FetchAll - формат массива

:ul1 = 0; 

$sql = "SELECT word FROM tbl WHERE 1 = 1 AND catid > :ul1 ORDER BY RAND() LIMIT 3"; 

$stmt1 = $pdo->prepare($sql1); 
$stmt1->bindParam(':ul1', $ul1); 
$stmt1->execute(); 
$row1 = $stmt1->fetchAll(); 

var_dump($row1); 

Это выводит:

array(3) { 
    [0]=> 
    array(2) { 
    ["word"]=> 
    string(8) "arrochar" 
    [0]=> 
    string(8) "arrochar" 
    } 
    [1]=> 
    array(2) { 
    ["word"]=> 
    string(7) "cabinet" 
    [0]=> 
    string(7) "cabinet" 
    } 
    [2]=> 
    array(2) { 
    ["word"]=> 
    string(10) "doghearted" 
    [0]=> 
    string(10) "doghearted" 
    } 
} 

я могу получить доступ к элементу массива с помощью:

$test = $row1[2][0]; 

Я задавался вопросом, есть ли способ получить более простой массив - например Кажется, что каждый элемент массива содержит одну и ту же вещь дважды.

Не то чтобы это важно - я все еще могу делать то, что мне нужно делать, мне было просто любопытно.

ответ

1

Хотя вы просите PDO::FETCH_ASSOC постоянная (по телефону fetchAll(PDO::FETCH_ASSOC) вы получите только одно значение), но есть еще более умные выборки режим - PDO::FETCH_COLUMN

$ul1 = 0; 
$sql = "SELECT word FROM tbl WHERE catid > ? ORDER BY RAND() LIMIT 3"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute([$ul1]); 
$data = $stmt->fetchAll(PDO::FETCH_COLUMN); 

var_dump($data); 

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

$test = $data[2]; 

или перебрать с

foreach ($data as $word) 
{ 
    echo "$word</br>\n"; 
} 
+0

Спасибо за это - я потратил много времени на ваш сайт phpdelusions, когда я начинал с PDO в начале этого года. Я должен был заметить бит PDO :: FETCH_COLUMN на вашем сайте, когда я проверил его перед публикацией здесь. Еще раз спасибо. – 4532066

+0

Это понятно, потому что есть слишком много информации, и никто не может получить все сразу :( –

Смежные вопросы