[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание многомерного ассоциативного массива
Гость_Семён
Есть SQL-таблица "supusers" со столбцами manager_id, login, pwd, group, ip, fio, timeout, parent_id, agent_id, group_agent

и значениями к примеру:

28, zubova, gtvsuo2, 9, Зубова Вера, 0, 1

остальные строки аналогичны (дальше из кода поймете)

Нужно написать такую функцию, которая бы выводила многомерный ассоциативный массив вида:
Array (
[28] => Array
(
[login] => zubova
[passw] => gtysuo2
[group_id] => 9
[fio] => Зубова Вера
[parent_id] => 0
[agent_id] => 1
)

[30] => Array
(
[login] => artamonova
[passw] => refdqy6
[group_id] => 9
[fio] => Фамилия И О
[parent_id] => 100
[agent_id] => 1
)

[32] => Array
(
[login] => katerina
[passw] => fr454ew3
[group_id] => 9
[fio] => Фамилия И О
[parent_id] => 100
[agent_id] => 1
)

[35] => Array
(
[login] => oper2
[passw] => oper2
[group_id] => 3
[fio] => Фамилия И О
[parent_id] => 0
[agent_id] => 0
)
)


где 28, 30, 32, 35 не индексы а $row['manager_id']... короче даю код функции, всё поймёте:
function get_users_array()
{
$sql = 'SELECT * FROM supusers';
$res = sql_query($sql);

$return = array();
if (mysql_num_rows($res))
{
while ($row = mysql_fetch_assoc($res))
{
$return[$row['manager_id']] = array
(
'login' => $row['login'],
'passw' => $row['pwd'],
'group_id' => $row['group_agent'],
'fio' => $row['fio'],
'parent_id' => $row['parent_id'],
'agent_id' => $row['agent_id'],
);

}
}

return $return;
}


данная функция будет выводить следующее:
Array (
[0] => Array
(
[login] => zubova
[passw] => gtysuo2
[group_id] => 9
[fio] => Зубова Вера
[parent_id] => 0
[agent_id] => 1
)

[1] => Array
(
[login] => artamonova
[passw] => refdqy6
[group_id] => 9
[fio] => Фамилия И О
[parent_id] => 100
[agent_id] => 1
)

[2] => Array
(
[login] => katerina
[passw] => fr454ew3
[group_id] => 9
[fio] => Фамилия И О
[parent_id] => 100
[agent_id] => 1
)

[3] => Array
(
[login] => oper2
[passw] => oper2
[group_id] => 3
[fio] => Фамилия И О
[parent_id] => 0
[agent_id] => 0
)
)

а мне нужно чтобы там стояли значения manager_id принадлежащие конкретным записям... во внутреннем ассоциативном массиве их не было...
из функции видно что я пересобираю массив с другими ключами... так надо...
проблема кроется в районе
$return[$row['manager_id']] = array




Спустя 20 минут, 16 секунд (27.07.2011 - 08:23) T1grOK написал(а):
А что получаете если вывести $row['manager_id'] в функции?

Спустя 19 минут, 39 секунд (27.07.2011 - 08:42) Guest написал(а):
Если вывести к примеру:
function get_users_array()
{
$sql = 'SELECT * FROM supusers';
$res = sql_query($sql);

$return = array();
if (mysql_num_rows($res))
{
while ($row = mysql_fetch_assoc($res))
{
$return[$row['manager_id']] = array
(
'manager_id' => $row['manager_id'],
'login' => $row['login'],
'passw' => $row['pwd'],
'group_id' => $row['group_agent'],
'fio' => $row['fio'],
'parent_id' => $row['parent_id'],
'agent_id' => $row['agent_id'],
);

}
}

return $return;
}

то получу:
Array (
[0] => Array
(
[manager_id] => 28
[login] => zubova
[passw] => gtysuo2
[group_id] => 9
[fio] => Зубова Вера
[parent_id] => 0
[agent_id] => 1
)

[1] => Array
(
[manager_id] => 30
[login] => artamonova
[passw] => refdqy6
[group_id] => 9
[fio] => Фамилия И О
[parent_id] => 100
[agent_id] => 1
)

[2] => Array
(
[manager_id] => 32
[login] => katerina
[passw] => fr454ew3
[group_id] => 9
[fio] => Фамилия И О
[parent_id] => 100
[agent_id] => 1
)

[3] => Array
(
[manager_id] => 35
[login] => oper2
[passw] => oper2
[group_id] => 3
[fio] => Фамилия И О
[parent_id] => 0
[agent_id] => 0
)
)

т.е. они выводятся только мне нужно их не внутри второго массива получить а как ключи первого внешнего как в начале моего первого поста

Спустя 1 час, 58 минут, 57 секунд (27.07.2011 - 10:41) T1grOK написал(а):
Это я и с первого раза понял. Что если в функции вывести айдишники, что показывает?

......
while ($row = mysql_fetch_assoc($res))
{
echo $row['manager_id'].'<br>';
$return[$row['manager_id']] = array
(
'manager_id' => $row['manager_id'],
'login' => $row['login'],
'passw' => $row['pwd'],
'group_id' => $row['group_agent'],
'fio' => $row['fio'],
'parent_id' => $row['parent_id'],
'agent_id' => $row['agent_id'],
);

}
......

Спустя 1 час, 27 минут, 51 секунда (27.07.2011 - 12:09) Invis1ble написал(а):
Гость_Семён
Очень странно.... Ты уверен, что не выполняешь никаких действий с полученным массивом перед выводом его дампа? Потому как очень на это похоже...

Спустя 4 часа, 16 минут, 6 секунд (27.07.2011 - 16:25) Guest написал(а):
у меня идет SOAP-запрос (nuSOAP библиотеки), в качестве SOAP_SERVER прописан PHP-файл на другом серваке, где кстати и хранится база. в том пхп-файле уже написаны функции... т.е. изначально у меня идет запрос вида:
...код...
$users_n = $agent->request('get_users_array');
print_r($users_n); exit;
...
код...

тут я торможу и смотрю что получаю на выходе...

как идет return $return; из вышенаписанной мною функции в переменную $users_n я чесно говоря без понятия но как ему еще идти если не как обычно))

Спустя 3 часа, 41 минута, 9 секунд (27.07.2011 - 20:07) Invis1ble написал(а):
Guest
Цитата
$agent->request('get_users_array')

ну дык это ж все объясняет smile.gif

Спустя 12 часов, 45 минут, 46 секунд (28.07.2011 - 08:52) Guest написал(а):
а поподробней можно? есть возможность создания многомерного ассоциативного массива или нет? или мне на конечной стороне опять его пересобирать?

Спустя 3 часа, 51 минута, 51 секунда (28.07.2011 - 12:44) Invis1ble написал(а):
Guest
Я говорю о том, что ты показываешь код функции (в которой нет ошибок), а сам говоришь, что этой функции у тебя нет (если я правильно понял).
Зато ты вызываешь непонятный метод request, код которого ты не приводишь. И здесь я говорю, что это все объясняет, т.к. есть промежуточные операции в виде вызова этого самого метода, где скорее всего и происходит "сбой" в ключах.
Покажи код метода, дабы хоть немного прояснить ситуацию.

Спустя 3 часа, 25 минут, 16 секунд (28.07.2011 - 16:09) Гость_Семён написал(а):
Вот код метода если тебе он поможет:
public static function request($method,$params=array(), $server = FALSE){
if ($server === FALSE)
{
$server = SOAP_SERVER;
}
else
{
$server = SOAP_SERVER;
}
$soap = new nusoap_client($server);
$err = $soap->getError();
if ($err)
$result = $err;
else
$result = $soap->call($method, $params);
return $result;
}


Теперь попросишь показать call? =) а потом еще пару десятков углублений))

На словах метод reqest просто организует непрямое обращение к базе данных, т.е. обращается к другому серверу и передает результаты в виде куска XML у меня в качестве SOAP-сервера пхп-файл с функциями в которых уже и идут sql-запросы. сам этот файл и база находятся на отдельном сервере. просто очень удобно в плане безопасности когда изначальный сервер внешний а тот на котором база внутренний... так вот... параметров у метода request два: первый это название функции на SOAP-сервере, второй - ассоциативный массив из параметров этой функции (в данном случае второго параметра нет)... если было бы со вторым было бы примерно так:
	$oferta = $agent->request('get_oferta',array(array('blabla1' => $start, 'blabla2' => $end)));

а функция работала бы так:
function get_oferta($params)
{
$sql = 'SELECT '.$params['blabla1'].' from '.$params['blabla2'];
$res = sql_query($sql);

$return = array();
if (mysql_num_rows($res))
{
while ($row = mysql_fetch_assoc($res))
{
$return[$row['id']] = $row;
}
}


return $return;
}

так что ничего страшного метод не делает...

Спустя 16 часов, 7 минут, 53 секунды (29.07.2011 - 08:17) Гость_Семён написал(а):
Ладно, тему похоже можно закрывать, раз нет людей, работавших с SOAP-библиотеками. Прочитал, что вроде как SOAP не умеет передавать многомерные ассоциативные массивы, очень жаль... буду пересобирать на конечной стороне, благо табличка небольшая...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.