Php $users_ID始终获得";2“;作为价值

Php $users_ID始终获得";2“;作为价值,php,arrays,wordpress,logic,Php,Arrays,Wordpress,Logic,如果user meta password等于我通过foreach循环比较的值,我需要从WordPress中的users表中获取users\u ID。这就是我到目前为止所做的: $wp_users = get_users(); foreach ($wp_users as $usr) { $user_meta = get_user_meta($usr->data->ID); foreach ($user_meta as $key => $value) {

如果
user meta password
等于我通过
foreach
循环比较的值,我需要从WordPress中的
users
表中获取
users\u ID
。这就是我到目前为止所做的:

$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]);
        }
    }
}
在上面的代码中,我获取所有用户并循环搜索结果,寻找正确的元值并填充新数组
passport
var\u 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>';
}
在我的逻辑中,如果值位于第一个数组
$passport
,我应该获得该
$users\u ID=$usr->data->ID的当前用户ID
但令人惊讶的是,如果我打印
echo$users\u ID
我会得到以下输出:

2
2
2
什么时候应该是:

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

我做错了什么?

第二个循环中的任何地方都没有$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数组以将用户元passport映射到用户id,然后在第二个循环中,您可以使用用户元passport值轻松获取用户id。

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

你的第二辆车在第一辆车里吗?如果没有,那么
$usr
不会改变,
$usr->data->ID
也不会改变。我该怎么做?有什么建议吗?请不要发表评论作为答案。我不能这样做,因为主要的想法是将来自导入文件的数据与现有WP用户进行匹配,并且通过匹配passport是唯一的方法way@JayBlanchard很抱歉,我没有在评论中看到这一点。或者这个“答案”被视为一条评论?这个答案看起来更像是一条评论,因为你没有展示你所建议的操作。不管我是否得到它,也许通过这样做,
$passport[$usr->data->ID]=str_replace(“”,,$value[0])
将解决这个问题,然后我通过
数组_search
获得了密钥,对吗?@ReynierPM我在我的edit-build$passport中提到过,通过将passport映射到一个userId。即,
$passport[str_replace('',$value[0])]=$usr->data->ID
然后在第二个循环中获取id。
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
}