2013-06-22 5 views
0

У меня есть функция, которая получает из БД все данные пользователей из разных таблиц. Я использую PDO и что возвращает для каждого SELECTassociative array.Смешивание ассоциативных массивов

Я хочу, чтобы функция вернула только один array, включая всю информацию, полученную из БД. Таким образом, большой array со всеми пользовательскими данными.

Проблема в том, что я получаю ошибки, потому что я не могу просто слить больше arrays или у меня будет Array to string conversion error.

Как я могу смешать все arrays в одном понятном array?

function userInfo($uID, $pdo) { 
    $user = PDOselect('user', '*', array('id_user'=> $uID), $pdo); 
    $user_registration = PDOselect('user_registration', '*', array('id_user'=> $uID), $pdo); 
    $user_addfields_anagraphic = PDOselect('user_addfields_anagraphic', '*', array('id_user'=> $uID), $pdo); 
    $user_addfields_legal = PDOselect('user_addfields_legal', '*', array('id_user'=> $uID), $pdo); 
    $user_addfields_public = PDOselect('user_addfields_public', '*', array('id_user'=> $uID), $pdo); 
    return ..... 
} 
+0

Вы можете решить эту проблему двумя способами. 1 создайте один оператор sql, чтобы вернуть один набор данных или иметь функцию для построения одного массива путем итерации по множеству массивов – DevZer0

ответ

2

Вы можете использовать + оператор или array_merge() для объединения двух массивов.

+ оператор: Входит в первый массив элементы второго. Для ключей, которые существуют в обоих массивах, совпадающие элементы второго массива будут игнорироваться.

array_merge(): Входит в первый массив элементы второго. Если есть элементы в обоих массивах с тем же ключом, поведение этой функции зависит от:

  1. ключ цифровой: элемент будет добавлен и ключ перенумерован
  2. ключ строка: более поздняя версия заменит первый номер .

Пример:

// array ([colour] => red, [0] => 2, [1] => 4) 
$array1 = array("colour" => "red", 2, 4);  

// array ([0] => a, [1] => b, [colour] => green, [shape] => circle, [2] => 4 
$array2 = array("a", "b", "colour" => "green", "shape" => "circle", 4); 

Используя (+):

$result = $array1 + $array2; 
// $result: array ([colour] => red, [0] => 2, [1] => 4, [shape] => circle, [2] => 4) 

Используя (array_merge):

$result = array_merge($array1, $array2); 
// $result: array ([colour] => green, [0] => 2, [1] => 4, [2] => a, [3] => b, [shape] => circle, [4] => 4) 

Я надеюсь, что это будет полезно для вас.

0

Похоже, вы должны сделать что-то вроде этого:

function userInfo($uID, $pdo) { 
    return array(
     'user' => PDOselect('user', '*', array('id_user'=> $uID), $pdo), 
     'user_registration' => PDOselect('user_registration', '*', array('id_user'=> $uID), $pdo, 
     'user_addfields_anagraphic' => PDOselect('user_addfields_anagraphic', '*', array('id_user'=> $uID), $pdo, 
     'user_addfields_legal' => PDOselect('user_addfields_legal', '*', array('id_user'=> $uID), $pdo, 
     'user_addfields_public' = PDOselect('user_addfields_public', '*', array('id_user'=> $uID), $pdo, 
     // etc.. 
    ); 
}