$ users_ID总是得到" 2"作为价值

时间:2014-06-12 15:38:28

标签: php arrays wordpress logic

如果users_ID等于我通过users周期进行比较的值,我需要从WordPress中的user-meta-password表中获取foreach。这就是我到目前为止所做的:

$wp_users = get_users();
foreach ($wp_users as $usr) {
    $user_meta = get_user_meta($usr->data->ID);
    foreach ($user_meta as $key => $value) {
        if ($key === "user-meta-passport") {
            $passport[] = str_replace(' ', '', $value[0]);
        }
    }
}

在上面的代码中,我获取所有用户并在结果上循环查找正确的元值并填充新数组passportvar_dump($passport)的结果是:

array (size=3)
  0 => string 'PP36199230' (length=10)
  1 => string 'PP10731115' (length=10)
  2 => string 'PP73465172' (length=10)

现在在其他foreach语句中,我尝试在passport数组中找到当前值(我正在寻找的那个),如下所示:

foreach ($csv as $row) {
    echo str_replace(' ', '', $row[3]) . '<br>';

    if (in_array(str_replace(' ', '', $row[3]), $passport)) {
        $users_ID = $usr->data->ID;
    }
    else {
        $users_ID = "";
    }

    //echo $users_ID . '<br>';
}

这是echo foreach中的$csv的输出:

PP36199230
PP98933287
PP54832201
PP92098144
PP10731115
PP17566259
PP47997057
PP29364086
PP73465172

在我的逻辑中,如果值在第一个数组$passport中,我应该获得该$users_ID = $usr->data->ID;的当前用户ID,但令人惊讶的是,如果我打印echo $users_ID我得到此输出:< / p>

2
2
2

什么时候应该是这样的:

3 - the users_ID for value PP36199230
1 - the users_ID for value PP10731115
2 - the users_ID for value PP73465172

我做错了什么?

2 个答案:

答案 0 :(得分:1)

你没有从第二个循环中的任何地方获得$ usr:

foreach ($wp_users as $usr) {
    //Snip
}
//$usr is now the last user in $wp_users

foreach ($csv as $row) {
    //Snip
        $users_ID = $usr->data->ID;//Will always be the last user
    //Snip
}

作为替代方案,您可以构建$ passport数组以将user-meta-passport映射到用户ID,然后在第二个循环中,您可以使用user-meta-passport值轻松获取用户ID。 / p>

答案 1 :(得分:0)

$ usr变量仅在foreach循环内定义 - 尝试将其添加到更高范围的数组,或将其添加到CSV文件中。