2013-03-20 2 views
0

2 배열 $userArray$differentArray이 있습니다.

질문 :
php array_search 인덱스 값을 찾으십시오.

Array 
    (
     [0] => Array 
      (
       [userId] => ID Object 
        (
         [_unknown:protected] => 
         [id_:protected] => 8k6Y4FTrnxKY45XrVkXvVJhL 
        ) 
       [firstName] => Joe 
       [lastName] => Smith 
      ) 

     [2] => Array 
      (
       [userId] => ID Object 
        (
         [_unknown:protected] => 
         [id_:protected] => pCvR9qvIgGv8WyejcKmRtGD8 
        ) 
       [firstName] => Sue 
       [lastName] => Miller 
      ) 

    ) 
: 나는 $differentArray에서 $userId 일치 그래서 첫 번째/마지막 이름
$ userArray의

print_r를 당길 수 $userArray에서 인덱스 값을 찾기 위해 노력하고하면이 출력

print_r of $ differentArray는 다음을 출력합니다.

 Array 
    (
      [0] => Array 
        (
          [date] => 1363800434868 
          [userId] => ID Object 
            (
              [_unknown:protected] => 
              [id_:protected] => 8k6Y4FTrnxKY45XrVkXvVJhL 
            ) 

          [someTxt] => aaaa 
        ) 

      [1] => Array 
        (
          [date] => 1363800858828 
          [userId] => ID Object 
            (
              [_unknown:protected] => 
              [id_:protected] => 8k6Y4FTrnxKY45XrVkXvVJhL 
            ) 

          [someTxt] => cccc 
        ) 

      [2] => Array 
        (
          [date] => 1363817564430 
          [userId] => ID Object 
            (
              [_unknown:protected] => 
              [id_:protected] => pCvR9qvIgGv8WyejcKmRtGD8 
            ) 

          [someTxt] => ccc 
        ) 
    ) 
여기

및내 시도하지만, 그것은 단지

$i = 0; 
    while ($i < count($differentArray)){ 
     $userId = $differentArray[$i]['userId']; 
     $key = array_search($userId, $userArray); 
     $firstName = $userArray[$key]['firstName']; 
     $lastName = $userArray[$key]['lastName']; 
     $i++; 
    } 

$userArray 당신을 감사와 동일한 방식으로 구성되어 *$differentArray을 조 스미스
를 출력합니다.

+0

실제로 while 루프는 절대 멈추지 않아야합니다 ... – ITroubs

+0

@ITroubs가 맞습니다. 끝에'$ i ++ '가 필요합니다. '$ total'은 무엇으로 설정되어 있습니까? – Ronnie

+0

문제가 해결되면 루프는 단지 데모이며 리터럴 해석을위한 것이 아닙니다. 혼란에 대해 미안합니다 –

답변

1

남자 인 경우 foreach을 사용하십시오.

$i = 0; 
while ($i < $total) { 
    $userId = $differentArray[$i]['userId']; 
    // $key = array_search($userId, $userArray); 
    foreach ($userArray as $k => $user) { 
     if($user["userId"] == $userId){ 
      $key = $k; 
      break; // avoid useless loop 
     } 
    } 
    $firstName = $userArray[$key]['firstName']; 
    $lastName = $userArray[$key]['lastName']; 
    $i++; 
} 
+0

물음표를 설명 할 수 있니? if ($ user [ "userId"]/* -> ??? */== $ userId) {' –

+0

'id_'가 보호 속성이기 때문에 어떻게 접근되는지 모르겠습니다. –

+0

오 이런 식으로'$ differentArray [$ i] [ 'userId']; ' –

1

ID 개체가 무엇인지 잘 모르겠지만 ID 속성을 반환하는 __toString 메서드가 있다고 가정합니다.

$output = array(); 
foreach ($differentArray as $user) { 
    foreach ($userArray as $searchedUser) { 
     if ($searchedUser['userId'] == $user['userId']) { 
      $output[] = $searchedUser; 
     } 
    } 
} 

이렇게하면 $ 출력 배열에서 찾고있는 사용자를 배치 할 수 있습니다. 이렇게하면 색인이 더 이상 필요하지 않습니다. 값을 변수로 끌어 오기 위해 $ 출력을 반복 할 수 있습니다. 예 :

foreach ($output as $user) { 
    list($userId, $firstName, $lastName) = $user; 
    // do your code here 
} 

당신은 당신이 그것을 찾을 때 루프에서 탈출 또는 $ 출력 배열에서 첫 번째를 꺼내 수있는 것보다 단지 $ userArray에서 하나의 일치가 될 수 있음을 확신하는 경우.

$ differentArray 구조체를 제공하지 않았거나 실제로 예상 한 내용을 지정하지 않았기 때문에이 답변을 게시하는 데 많은 추측을했습니다.

+0

내 질문에 조정 –