解析对数组的sql响应

Sql response seems like this: Name|Locality|Date|Address. Rows can contains same Name, Locality and Date, but Addres will be changed every time. So, I need put this response to array like this:

[0] => 'Name':'...',
       'Locality':'...',
       'Date':'...',
       'Address': [0] => '...',
                  [1] => '...',
                  [2] => '...',
                  ...
...

I have tryed to use this code, but is does't work =(

while($r = mysqli_fetch_assoc($q_res)){
    $i = 0;

    if(!in_array($r['watcher_name'], $daily_quests)){          
        $daily_quests[$i]['name'] = $r['name'];
        $daily_quests[$i]['date'] = $r['date'];
        $daily_quests[$i]['locality'] = $r['locality'];
    }
    else{
        $daily_quests['address'] = $intrnal_addr[$i => $r['address']];
    }

}

Try this :

//Initialisation
$name = '';
$daily_quests = array();
$i = -1;

while($r = mysqli_fetch_assoc($q_res)){

    //If the row is different than precedent
    if (strcmp($r['name'], $name) != 0)
    {
        $i++;
        $name = $r['name'];
        $daily_quests[$i] = array();
        $daily_quests[$i]['name'] = $r['name'];
        $daily_quests[$i]['date'] = $r['date'];
        $daily_quests[$i]['locality'] = $r['locality'];
        $daily_quests[$i]['address'] = array(); 
    }
    // For each row, we must add address
    $daily_quests[$i]['address'][] = $r['address']
}

However, we suppose that name is unique. It's more safe to compare with an id.

You can solve this in the MySQL query by grouping it:

select
Name, Date, Locality, group_concat(Address SEPARATOR '|') as addresses
from __table__
group by Name, Date, Locality;

Then in php:

while($r = mysqli_fetch_assoc($q_res)){
    $r['Address'] = explode('|', $r['addresses']);
    unset($r['addresses']);
    $daily_quests[] = $r;
}