2013-03-20 202 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