Вставить ассоциативный массив в другой ассоциативный массив, сохраняя ключи - PullRequest
1 голос
/ 21 июня 2011

Функция у меня ниже и вывод ее.

$results = mysql_query("SELECT * FROM tmsessions WHERE session_user_id ='".$_SESSION['user_id']."'");

    $count = mysql_num_rows($results);
    $username = mysql_fetch_assoc(mysql_query("SELECT user_fname FROM tmusers WHERE user_id = '".$_SESSION['user_id']."'"));

    $json_data = array( 'userID'=>$_SESSION['user_id'], 'userName'=>$username['user_fname'], 'total'=>$count );

    while($session = mysql_fetch_assoc($results))
    {
        $numListItems = mysql_num_rows(mysql_query("SELECT session_id, listing_unique_id FROM tmdata WHERE session_id = '".$session['session_id']."'"));

        $listItems = array('sessionID'=>$session['session_id'],
                           'sessionName'=>$session['session_name'],
                           'sessionCount'=>$numListItems,
                           'sessionDC'=>date('h:iA - M m y',strtotime($session['session_date_created'])),
                           'sessionDM'=>date('h:iA - M m y',strtotime($session['session_date_modified'])),
                           'sessionActive'=>$session['session_active']);

        array_push($json_data, $listItems);

    }

    return json_encode($json_data);

Какие выходы:

{"0":
{"sessionID":"9",
 "sessionName":"dataName0",
 "sessionCount":100,
 "sessionDC":"12:11AM - Jun 06 11",
 "sessionDM":"01:00AM - Jan 01 70",
 "sessionActive":"1"},
 "1":
{"sessionID":"10",
 "sessionName":"dataName1",
 "sessionCount":100,
 "sessionDC":"05:04PM - Jun 06 11",
 "sessionDM":"01:00AM - Jan 01 70",
 "sessionActive":"1"},
 "userID":"1",
 "userName":"Ezra",
 "total":2}

Мне нужно, чтобы биты «0»: и «1» стали «listItem»: каждого нового ассоциативного массива, но я не знаю, как правильно манипулировать массивами, чтобы получить это: (.

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Попробуйте, если я правильно понимаю ваш вопрос, чем его помощь, в противном случае вы извините и скажите мне, что я неправильно понимаю?

$results = mysql_query("SELECT * FROM tmsessions WHERE session_user_id ='".$_SESSION['user_id']."'");

$count = mysql_num_rows($results);
$username = mysql_fetch_assoc(mysql_query("SELECT user_fname FROM tmusers WHERE user_id = '".$_SESSION['user_id']."'"));

$json_data = array( 'userID'=>$_SESSION['user_id'], 'userName'=>$username['user_fname'], 'total'=>$count );

while($session = mysql_fetch_assoc($results))
{
    $numListItems = mysql_num_rows(mysql_query("SELECT session_id, listing_unique_id FROM tmdata WHERE session_id = '".$session['session_id']."'"));

    $listItems = array('sessionID'=>$session['session_id'],
                       'sessionName'=>$session['session_name'],
                       'sessionCount'=>$numListItems,
                       'sessionDC'=>date('h:iA - M m y',strtotime($session['session_date_created'])),
                       'sessionDM'=>date('h:iA - M m y',strtotime($session['session_date_modified'])),
                       'sessionActive'=>$session['session_active']);

    $json_data['listItem'][] = $listItems;
}

return json_encode($json_data);
1 голос
/ 21 июня 2011

В PHP индексированные и ассоциативные массивы обрабатываются как один и тот же тип (т. Е. Матрицы или одномерные массивы, a [0], a [1], ... a [N], vs a ['one'], a ['two'], ... a ['кое-что']).

При использовании array_push () вы не создаете или не добавляете в ассоциативный хеш, а индексируете значение в концемассив.

Вместо использования функции array_push () вы можете выполнить прямое присвоение имени по вашему выбору, например,

$listItems[$session['session_id']] = array('sessionID'=>$session['session_id'],
                           'sessionName'=>$session['session_name'],
                           'sessionCount'=>$numListItems,
                           'sessionDC'=>date('h:iA - M m y',strtotime($session['session_date_created'])),
                           'sessionDM'=>date('h:iA - M m y',strtotime($session['session_date_modified'])),
                           'sessionActive'=>$session['session_active']);
...