RobDubya
RobDubya

Reputation: 93

PHP multidimensional array from database results

I'm a bit new to multidimensional arrays, and would like to see if I'm doing it right. preferably, I'd like to name the arrays within the main array for ease of use.

$unique_array = array(
    username=>array(),
    user_id=>array(),
    weeknumber=>array()
    );

and then I have a while loop which checks some database results:

while($row = mysql_fetch_array($query)) //yes, I know mysql is deprecated
{
$unique_array[] = username=>$row['username'], user_id=>$row['user_id'], week number=>['weeknumber'];
}

I'm not sure if I am placing the values in the array from within the while loop correctly, or if it needs to be done some other way. I couldn't find any resources I could easily understand on SO or elsewhere to deal with query results within a named array within a multidimensional array.

EDIT FOLLOW UP QUESTION: I also need to check the array for duplicate values, because there will be multiple values that are exactly the same, but I only want one of them.

Any help is appreciated!

EDIT SOLUTION:

By modifying the answer I was able to create code to fit my needs.

Array initialization:

$unique_array = array(
    'username'=>array(),
    'user_id'=>array(),
    'weeknumber'=>array()
    );

Building the array from within a while loop:

while($row = mysql_fetch_array($query))
{
$unique_array[] = array('username'=>$row['username'], 'user_id'=>$row['user_id'], 'weeknumber'=>$row['weeknumber']);
}

And finally, I need to make sure the array values are unique (there are duplicates entries as a result of database and query limitations), after the while loop I have:

print_r(multi_unique($unique_array));

Upvotes: 2

Views: 14564

Answers (1)

Haomin Li
Haomin Li

Reputation: 76

Is the top level an associative array or a numeric array?

If it is an associative array, it should have structure like this:

$unique_array = array(
    'username'=>array('John','Mike',...),
    'user_id'=>array(1,2,3,...),
    'week_number'=>array(1,2,3,...)
);

Or if it is a numeric array, it should have structure like this:

$unique_array = array(
    array('username'=>'John', 'user_id'=>1, 'week_number'=>1),
    array('username'=>'Mike', 'user_id'=>2, 'week_number'=>2),
    array('username'=>'Sam', 'user_id'=>3, 'week_number'=>3),
    ...
)

for the first type use the code below:

while ($row = mysql_fetch_assoc($query)) {
    $unique_array['username'][] = $row['username'],
    $unique_array['user_id'][] = $row['user_id'],
    $unique_array['week_number'][] = $row['week_number'],
}

for the second type, it is something like your code. But there are some syntax problems:

while($row = mysql_fetch_array($query)) //yes, I know mysql is deprecated
{
    $unique_array[] = array('username'=>$row['username'], 'user_id'=>$row['user_id'], 'week_number'=>$row['weeknumber']);
}

Upvotes: 6

Related Questions