Я использую следующее заявление PDO с PDO :: FETCH_UNIQUE признак индексации результирующего массива по уникальному идентификатору строки.
<?php
$statement = $conn->prepare("SELECT
unique_id, field_1, field_2, field_3
FROM
table
WHERE
field_1 = 'foo'
AND field_2 = ?
ORDER BY
field_3
");
if($statement->execute(array($field_2_value)))
{
$resultArray = $statement->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE);
}
?>
$ ResultArray:
Array
(
[123] => Array
(
[field_1] => foo
[field_2] => someVal
[field_3] => bar
)
[234] => Array
(
[field_1] => foo
[field_2] => someVal
[field_3] => car
)
[345] => Array
(
[field_1] => foo
[field_2] => someVal
[field_3] => dog
)
)
Есть ли способ сохранить оба индекса массива как они есть и сохранить уникальный идентификатор строки в данных строки, как это:
Array
(
[123] => Array
(
[unique_id] => 123
[field_1] => foo
[field_2] => someVal
[field_3] => bar
)
[234] => Array
(
[unique_id] => 234
[field_1] => foo
[field_2] => someVal
[field_3] => car
)
[345] => Array
(
[unique_id] => 345
[field_1] => foo
[field_2] => someVal
[field_3] => dog
)
)
Я понимаю, что мог бы сделать это с помощью вторичного цикла, но было бы намного чище, если бы это был вариант в fetchAll()
,
Да, это вполне возможно, так как вы всегда можете добавить дополнительное поле в список полей.
$statement = $conn->prepare("SELECT
unique_id uid, unique_id, field_1, field_2, field_3
FROM
table
WHERE
field_1 = 'foo'
AND field_2 = ?
ORDER BY
field_3
");
и ваш уникальный идентификатор среди значений.
Тем не менее, я не думаю, что это совершенно необходимо, так как вы всегда можете получить индекс из foreach, как указано в другом ответе.
Есть ли способ сохранить оба индекса массива такими, какие они есть, и сохранить уникальный идентификатор строки в данных строки […]?
Насколько я знаю, нет. Тем не мение, для каждого поддерживает два синтаксиса:
foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
Первая форма зацикливается на массиве, заданном array_expression. На каждой итерации значение текущего элемента присваивается значению $ value, а внутренний указатель массива увеличивается на единицу (поэтому на следующей итерации вы будете смотреть на следующий элемент).
Вторая форма дополнительно назначит ключ текущего элемента
$key
переменная на каждой итерации.
1
Так что используйте второй синтаксис:
foreach($resultArray as $key => $values) {
//$key is contains the unique_id
//$values contains the other fields
//e.g. field_1, field_2, field_3
}
Увидеть это продемонстрировано в этот пример детской площадки.