2016-07-21 2 views
1

도와주세요. 필자는 데이터에 PHP 코드로 이러한 데이터를 결합하는 가장 좋은 방법이 무엇인지 모릅니다.ID를 사용하여 두 개의 PHP 배열에 가입하는 방법

내 데이터는 다음과 같습니다.

ArrayA(array('id'=>'1','Date'=>'datehere'),array('id'=>'2','Date'=>'datehere')); 
ArrayB(array('ArrayAId'=>'1','personal infos'=>'other data'),array('ArrayAId'=>'1','personal infos 2'=>'other data'),array('ArrayAId'=>'2','personal infos'=>'other data'),array('ArrayAId'=>'2','personal infos 2'=>'other data')); 

나는 그들의 동료 다음과 같은 ArrayB 항목 모든 ArrayA 항목을 보여주고 싶었다.
ArrayA-item1 

ArrayB item1 with ArrayA-item1 Id 

ArrayB item2 with ArrayA-item1 Id 


ArrayA-item2 

ArrayB item3 with ArrayA-item2 Id 

ArrayB item4 with ArrayA-item2 Id 

것은이 ArrayBArrayA가 각 행에 대해 약 100 개의 행을 포함한다. 그래서 50 ArrayA 항목을 얻으려고하면 ArrayB에 약 5000 개의 행이 있습니다.

그래서 성능상의 이유로 다음 접근 방식을 사용할 수 없습니다.

위의 코드는 내 페이지가 50 행에 5000 행을 반복해야하기 때문에 페이지를 죽게 만듭니다. 도와주세요. 그리고이 모든 데이터를 표시하려면 올바른 방향을 가리 키십시오.

미리 감사드립니다. 친절하게도 더 자세한 정보가 필요하면 알려주세요.

+0

실제 샘플 데이터로 두 배열을 모두 표시 할 수 있습니까? 위에서 언급 한 시나리오는 다소 혼란 스럽습니다. 실제 데이터를 통해 우리는 귀하를보다 효과적으로 도울 수 있습니다. –

+0

몇 가지 샘플 데이터를 제공합니다. 그리고 두 번째 루프 대신 in_array()를 사용 해본 적이 있습니까? – Prashanth

+0

@ShrikantMavlankar 나는 자료를 더 수정한다. 더 낫니? –

답변

0

array_filter를 사용하여이 문제를 해결했습니다. 누군가가 내가하는 것처럼 문제가 발생할 경우를 대비하여 코드를 공유했습니다.

for($i=0; $i < count($mainArray) ; $i++){ 

    $currentId = mainArray[i]["id"]; 
    $output = array_filter($subArray, function ($value) use ($currentId) { return $value['mainId'] == $currentId; }); 

    foreach($output as $data) 
    { 
      //print data 
    } 
} 
2

루프를 사용하는 대신 배열 함수를 사용하십시오.

당신은 배열 함수에 콜백과 같은 array_intersect_uassoc()array_combine()

확인 PHP 매뉴얼 페이지를 배열 함수를 사용할 수 있습니다. 이 함수들을 사용하여 답을 만들 수 있습니다.

관련 문제