2013-03-20 203 views
0

我有2個數組$userArray$differentArray

問題:我試圖找到$userArray索引值,其中從$differentArray$userId比賽,這樣我可以拉頭/姓氏
php array_search查找索引值

$ userArray的print_r輸出這樣的:

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 
      ) 

    ) 

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 
        ) 
    ) 

這裏是我的嘗試,但它只能輸出張三
*
$differentArray的架構相同的方式$userArray

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

謝謝。

+0

其實你的while循環不應該停止... – ITroubs 2013-03-20 22:57:07

+0

@ITroubs是正確的。你最後需要'$ i ++'。什麼是'$ total'設置爲? – Ronnie 2013-03-20 22:59:06

+0

修復了這個問題,循環只是一個演示,並不是爲了字面解釋。對不起,我感到困惑 – 2013-03-20 23:00:18

回答

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){' – 2013-03-20 23:50:18

+0

我不知道如何訪問id_',因爲它是受保護的屬性。 – 2013-03-20 23:53:04

+0

哦,就像這樣'$ differentArray [$ i] ['userId'];' – 2013-03-20 23:54:02

1

我不確定那個ID對象是什麼,但我認爲它有一個返回id屬性的__toString方法。

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

這會將您要查找的用戶放到$ output數組中。這樣你就不再需要索引了。您可以遍歷$ output以將值提取到變量。例如。

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

如果你是一定會出現只能在$ userArray一場比賽比你可以從環打破了,當你發現它或拔出從$輸出數組的第一個。

我做了很多猜測發佈答案,因爲你沒有提供$ differentArray結構,也沒有指定它是你實際期望的。

+0

對我的問題作了調整 – 2013-03-20 23:49:08