PDO - array_map возвращает идентификаторы объектов в ключах - PullRequest
0 голосов
/ 24 апреля 2018

эй, у меня есть массив с возвращенными ключами

$temp = $sth->fetchAll(PDO::FETCH_ASSOC);

мой результат выглядит так:

[0] => [
    'id' = 11,
    'title' => 't1'
]

[1] => [
    'id' = 12,
    'title' => 't2'
]

если я хочу вернуть идентификаторы в качестве ключа, я вызываю что-то вроде этого:

$temp = array_map(function($v){return $v[0];}, $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC));

и мой результат выглядит так:

[11] => [
    'title' => 't1'
]

[12] => [
    'title' => 't2'
]

как вернуть массив объектов по идентификатору?когда я делаю это, у меня нет методов в объекте ...

$temp = array_map(function($v){return $v[0];}, $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_CLASS));

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Использование foreach:

foreach($input as $k=>$v){
    $output[$v['id']] = array('title'=>$v['title']);
}
print_r($output);
0 голосов
/ 25 апреля 2018

Просто нужно было добавить это как ответ, так как я считаю, что это самый короткий способ сделать это, используя array_column() с третьим параметром, который является ключом, по которому вы хотите индексировать данные. Если вы используете null в качестве второго параметра, он будет индексировать все данные по 'id', вместо этого вы можете использовать 'title', и это будет только индексировать столбцы заголовков по ID ...

$output = array_column($temp,null,'id');

Что дает ...

Array
(
    [11] => Array
        (
            [id] => 11
            [title] => t1
        )

    [12] => Array
        (
            [id] => 12
            [title] => t2
        )

)
0 голосов
/ 24 апреля 2018

Я сделаю немного более простой код, как показано ниже: -

$fianl_array = array_combine(array_column($temp,'id'),$temp);

Выход: - https://eval.in/993728

Ссылка: -

array_column ()

array_combine ()

...