Я постоянно выполняю запросы к базам данных и получаю многомерные массивы, представляющие строки обратно. К сожалению, индекс первого уровня является числовым, что не очень информативно. У меня часто есть таблицы со строками идентичности в таблице, и я хочу превратить полученный многомерный массив во что-то, что ассоциативно индексируется этим столбцом идентичности.
Нелегкая, самостоятельно созданная пользовательская функция, которая делает то, что я хочу:
function identity_associate($data, $identity_column='identity'){
$res = array();
foreach($data as $single_row){
$loop_identity = $single_row[$identity_column];
$res[$loop_identity] = $single_row;
}
return $res;
}
Очевидно, что я мог бы использовать цикл foreach каждый раз, когда я хотел сделать это, или использовать эту функцию, чтобы сделать это для меня, когда я каждый раз передаю ему данные, но если есть встроенный способ сделать это тривиально с нативные функции PHP, я бы предпочел использовать это, чтобы вместо этого исправить. Я пытался найти что-то подходящее в документах php для сортировки и массивов, но не смог найти ничего точного, и Google тоже не сильно помог. Кто-нибудь знает что-то родное php или иначе проще?
т.е. Я хочу преобразовать данные, которые я получаю, когда запрашиваю базу данных ...
array(
array(
'user_id'=>45,
'identity'=>'bob',
'name'=>'Bob'
),
array(
'user_id'=>51,
'identity'=>'tchalvak',
'name'=>'TchalVak'
)
);
в нечто более полезное
array(
'bob'=>array(
'user_id'=>45,
'identity'=>'bob',
'name'=>'Bob'
),
'tchalvak'=>array(
'user_id'=>51,
'identity'=>'tchalvak',
'name'=>'TchalVak'
)
);
настолько оптимизировано, насколько это возможно, так как это то, что я бы использовал везде и всегда.
Edit:
Я хочу отметить, что я получаю данные в этом формате из базы данных, вызывая встроенную функцию в PDO, и она возвращает эквивалент первого массива:
$statement->execute();
return $statement->fetchAll(PDO::FETCH_ASSOC);
например. позвонив в sql ниже:
$data = query('select name, user_id, identity from users order by identity');
... получит первый массив в начале вопроса.