2012-08-14 5 views
1

에 큰 배열에 넣어 나는 여기에 데이터가 :및 PHP

Array 
(
[3] => Array 
    (
     [SiteID] => 3 
     [Balance] => 19000.00 
     [MinBalance] => 100000.00 
     [MaxBalance] => 1000000.00 
     [OwnerAID] => 17 
     [GroupID] => 1 
     [Deposit] => 1500 
     [Redemption] => 1000 
     [Reload] => 1000 
    ) 

    [3] => Array 
    (
     [SiteID] => 3 
     [Balance] => 19000.00 
     [MinBalance] => 100000.00 
     [MaxBalance] => 1000000.00 
     [OwnerAID] => 211 
     [GroupID] => 1 
     [Deposit] => 1500 
     [Redemption] => 1000 
     [Reload] => 1000 
    ) 


    [4] => Array 
    (
     [SiteID] => 4 
     [Balance] => 19000.00 
     [MinBalance] => 100000.00 
     [MaxBalance] => 1000000.00 
     [OwnerAID] => 17 
     [GroupID] => 1 
     [Deposit] => 1500 
     [Redemption] => 1000 
     [Reload] => 1000 
    ) 

    [4] => Array 
    (
     [SiteID] => 4 
     [Balance] => 19000.00 
     [MinBalance] => 100000.00 
     [MaxBalance] => 1000000.00 
     [OwnerAID] => 12 
     [GroupID] => 1 
     [Deposit] => 1500 
     [Redemption] => 1000 
     [Reload] => 1000 
    ) 

     [5] => Array 
     (
      [SiteID] => 2 
      [Balance] => 19000.00 
      [MinBalance] => 100000.00 
      [MaxBalance] => 1000000.00 
      [OwnerAID] => 11 
      [GroupID] => 1 
      [Deposit] => 1500 
      [Redemption] => 1000 
      [Reload] => 1000 
     ) 
    ) 
    ) 

가 그럼 난 OwnerAID가 소유의 목록을 가리키는 "CorpAID"라는 이름의 새 키를 만들 필요가 동일한 SiteID, 하나 이상의 OwnerAID가 SiteID를 소유 할 수 있음을 의미합니다. 결과는 다음과 같이 표시되어야합니다.

Array 
(
[0]=> Array 
(
    [SiteID] => 3 
    [Balance] => 19000.00 
    [MinBalance] => 100000.00 
    [MaxBalance] => 1000000.00 
    [OwnerAID] => 17 
    [GroupID] => 1 
    [Deposit] => 1500 
    [Redemption] => 1000 
    [Reload] => 1000 
    [CorpAID] => Array 
       (
        [0] => 17 
        [1] => 211 
       ) 
      ) 
    [1]=> Array 
(
    [SiteID] => 3 
    [Balance] => 19000.00 
    [MinBalance] => 100000.00 
    [MaxBalance] => 1000000.00 
    [OwnerAID] => 17 
    [GroupID] => 1 
    [Deposit] => 1500 
    [Redemption] => 1000 
    [Reload] => 1000 
    [CorpAID] => Array 
       (
        [0] => 12 
        [1] => 17 
       ) 
      )   

만들 수 있습니까? 도와주세요. 제게 올바른 길을 안내해 줘요. ​​미리 감사드립니다.

+1

첫 번째 배열에 키 충돌이 있습니다. 맞습니까? –

+0

나는 내 게시물, 미안 @ 잭 편집을 끝냈다. – Mic

+0

이것은 데이터베이스 레코드 등에서 오는 것입니까? –

답변

1

이것은 테스트되지 않은 코드이지만 진행 상황을 읽는 데 어느 정도 직관적이어야합니다. 그룹화 할 필드가 SiteID이라고 가정합니다.

$tmp =&$out[$record['SiteID']];$out[$record['SiteID']]을 반복해서 입력하는 것을 피하기위한 지름길입니다.

$out = array(); 

foreach ($records as $record) { 
    $tmp = &$out[$record['SiteID']]; 
    if (isset($tmp)) { 
     $tmp['CorpAID'][] = $record['OwnerAID']; 
    } else { 
     $tmp = $record; 
     $tmp['CorpAID'] = array($record['OwnerAID']); 
    } 
} 

, BTW MySQL의에서 당신은 또한 PHP에서 일을 쉽게하기 위해이 작업을 수행 할 수 있습니다 :

SELECT GROUP_CONCAT(OwnerAID) AS CorpAID 
FROM ... 
GROUP BY SiteID; 
0

을 난 당신이 키와 값의 저점 다차원 배열을 비교하는 작은 함수를 작성하는 것이 좋습니다 :

function findInArray($key, $value, $array){ 
    foreach($array as $key=>$row){ 
     if(array_key_exists($key, $row){ 
      if($row[$key] == $value) 
        return $key; 
     } 
    } 
    return -1; 
} 

하고 올바른 위치에 설정 값을 배열을 수행 foreach, 우리는 검색하면 결과 어레이는 이미 N 경우 SiteID에 존재 OwnerAID이 이미 CorpAID 배열에 있거나 우리가 추가하면 우리가 방금 본 세트에 추가합니다.

$result_array = array(); 
foreach($array as $row){ 
$key = findInArray('SiteID', $row['SiteID'], $result_array); 
    if($key == -1){ 
      $temp = $row; 
      $temp['CorpAID'] = array($row['OwnerAID']); 
      $result_array[] = $temp; 
      } 
    else { 
    if(findInArray('CorpAID', $row['OwnerAID'], $result_array) == -1){ 
      $result_array[$key]['CorpAID'][] = $row['OwnerAID']; 
     } 
    } 
} 
+1

@ kawashita86, 인덱스에서 함수 inarray를 어떻게 호출 할 수 있습니까? 고맙습니다 – Mic

0

, 당신은 값을 반복 할 필요가 당신이 찾고있는 무엇을 달성하고 새로운 CorpAID 필드를 할당하려면 : 우리가 중복 항목을 피할이 방법은 (당신이 게시 된 예제에서 원하지 않는 것 같다) 각 항목에. 그 다음에 CorpAID 필드는 SiteID에 의한 값에 대한 참조 일 필요가 있으며, 이는 각각 OwnerAID마다 반복 될 것입니다.

첫 번째 요소에 할당 할 때 참조가 중요하기 때문에 작성하는대로 OwnerAIDSiteID 개가 될 수 있기 때문에 참조가 충분하지 않습니다.

이 소리가 복잡할수록 코드는 작아집니다. 이 기준을 사용한다, 나는 나중에 정리를 설정 해제 :

$table = array(); 
foreach($data as &$item) 
{  
    $item['CorpAID'] = &$table[$item['SiteID']]; 
    $item['CorpAID'][] = $item['OwnerAID']; 
} 
unset($item); 
unset($table); 

그러나, 당신은 소유자 정보에서 (데이터 종종 중복) 사이트 정보를 분리하여 더 많은 혜택을 누릴 수 있습니다. 그것은 위와 비슷하게 작동 할 수 있습니다.