[김성민]님이 남기신 글:
>안녕하세요..
>
>php 배열문제좀 여쭤볼려고요..
>
>$body = Array(
>"서울시 강남구 무슨동 11569 어쩌구...",
>"서울시 강남구 요슨동 11569 어쩌구...",
>"서울시 강북구 아리동 11500 어쩌구...",
>"서울시 강북구 아리동 11569 어쩌구...",
>);
>
>for($i=0; $i<count($body); $i++){
>$str = explode(" ", $body[$i]);
>$last = "";
>for($n=3; $n<count($str); $n++){
> $last .= "".$str[$n];
>}
>$data[] = Array('res1' => $str[0], 'res2' => $str[1], 'res3' => $str[2], 'Last' =>
$last);
>}
>
>foreach($data as $key => $row){
>$res1[$key] = $row['res1'];
>$res2[$key] = $row['res2'];
>$res3[$key] = $row['res3'];
>$Last[$key] = $row['Last'];
>}
>
>array_multisort($res1, SORT_ASC, $res2, SORT_ASC, $data);
>
>echo "<pre>";
>print_r ($data);
>echo "</pre>";
>
>이렇게 하여,
>
>[0] = 서울시
>[1] = 강남구
>[2] = 무슨동
>[3] = 11569 어쩌구...",
>
>이런식으로 [0] 을 오름차순, [1]을 오름차순 하여 출력하는 것
까지는 됩니다.
>근데, [2] = 무슨동 부터 해당하는 부분을 랜덤으로 하고자
하는데 도무지 어려워서 여쭤봅니다.
>
>그니까, 출력조건이 [0]번째 오름차순, [1]번째 오름차순,
[2]번째 랜덤. 인데,
>
>"서울시 강남구 무슨동 11569 어쩌구...",
>"서울시 강남구 요슨동 11569 어쩌구...",
>"서울시 강북구 아리동 11500 어쩌구...",
>"서울시 강북구 아리동 11569 어쩌구...",
>
>이게 배열이라면,
>
>"서울시 강남구 무슨동 11569 어쩌구...",
>"서울시 강남구 요슨동 11569 어쩌구...",
>"서울시 강북구 아리동 11500 어쩌구...",
>"서울시 강북구 아리동 11569 어쩌구...",
>
>아리동을 가지고 있는 2개중 11500 이 먼저 나올수도 있고
나중에 나올수도 있는 형태입니다.
>서울시 강북구 아리동은 둘다 같으니 같이 정렬되면서 뒤에만
랜덤으로 할수 있는 방법이 있을까 해서 문의드립니다...
========================================
시(도) 구(군) 동(면) 을 각각 다차원 배열로 생성해서 제일
마지막 배열을 shuffle() 하거나
동이름까지를 하나의 키로 배열을 만들어 shuffle() 하면 됩니다.
전자의 경우는 좀 무식한 방법이기는 하지만
$data["서울시"]["강남구"]["무슨동"][]
= "11569 어쩌구...";
이런식으로 배열을 만들고 data 배열을
foreach($data AS $city=>$arr1)
{
foreach($arr1 AS $gu=>$arr2)
{
foreach($arr2 AS $dong=>$arr3)
{
shuffle($arr3);
$data[$city][$gu][$dong] = $arr3
}
}
}
이렇게 구현해야 합니다.
후자의 경우는
$data = array();
for( ... )
{
preg_match('^/([^\s]+\s+[^\s]+\s+[^\s]+)\s+(.+)$/',trim($body[$i]),$m);
$data[base64_encode($m[1])][] = $m[2];
}
// suffle and rewrite
foreach($data AS $k=>$arr)
{
shuffle($arr);
$data["$k"] = $arr;
// debug
echo base64_decode($k).' ';
print_r($arr);
}
이런식으로 짜면 됩니다.
|