Возможно ли сохранить уникальный индекс в массиве результатов с помощью PHP PDO :: FETCH_UNIQUE?

Я использую следующее заявление 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(),

2

Решение

Да, это вполне возможно, так как вы всегда можете добавить дополнительное поле в список полей.

$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, как указано в другом ответе.

1

Другие решения

Есть ли способ сохранить оба индекса массива такими, какие они есть, и сохранить уникальный идентификатор строки в данных строки […]?

Насколько я знаю, нет. Тем не мение, для каждого поддерживает два синтаксиса:

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
}

Увидеть это продемонстрировано в этот пример детской площадки.


1http://php.net/manual/en/control-structures.foreach.php

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector