基于受保护属性中的共享值在两个二维数组之间建立数据关系


Relate data between two 2d arrays based on a shared value in a protected property

我有两个数组$userArray$differentArray

问题:我正在尝试从$userArray中查找$userId$differentArray匹配的索引值,以便提取名字/姓氏

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

$differentArray的print_r输出如下:

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

**这是我的尝试,但它只输出Joe Smith
***$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++;
}

伙计,使用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++;
}

我不确定那个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中只能有一个匹配项,那么当您找到它或从$output数组中取出第一个匹配项时,您就可以从循环中跳出来。

我在发布这个答案时做了很多猜测,因为你没有提供$differentArray结构,也没有指定你实际期望的是什么。