首页 > 解决方案 > 在 foreach 循环中爆炸/内爆

问题描述

我有一个字符串列表,例如

$list = "foo, bar";

我在此列表上使用explode 将列表项作为数组获取:

$strings = explode(", ", $list);

现在我需要获取数组的每一项并将其一一传递给 API,API 将返回列表条目的 ID。我想得到一个与 $list 类似但使用 ID 而不是字符串的字符串。我的问题是我无法将数组传递给 API 函数。我需要为每个列表项都这样做。所以我正在遍历数组:

foreach($strings as $names){
    $ID = $o_api->GetGroupIdsByName($s_token, $names)->getData();
    $AssignedGroups = implode("", $ID).";";        
    echo $AssignedGroups;
    }

如果我运行这段代码,结果是:3;4; 这正是我需要将它传递给另一个 API 函数的原因。但是当我需要在循环之外重新使用这个列表时。如果我然后使用 $AssignedGroups 我只会得到最后一个 ID,而不是 2 个(或更多)合并的 ID。

我究竟做错了什么?

以下是完整的代码供参考:

 $Groups = explode(", ", $value["Groups"]);
    //var_dump($Groups);
    foreach($Groups as $Names){
    $GroupIDs = $o_api->GetGroupIdsByName($s_token, $Names)->getData();       
    $AssignedGroups = implode("", $GroupIDs).";";        
    echo $AssignedGroups;

}
    $o_api->CreateUser($s_token, $Login, $Password, $IsOfflineUser, $IsWindowsUser, $FirstName, $LastName, $AssignedGroups, $Ratings);

标签: php

解决方案


这里真正应该做的是:

$Groups = explode(", ", $value["Groups"]);
//var_dump($Groups);

// init as empty array
$AssignedGroups = [];
foreach ($Groups as $Names) {
    $GroupIDs = $o_api->GetGroupIdsByName($s_token, $Names)->getData();       
    // a new string to array
    $AssignedGroups[] = implode(';', $GroupIDs);
}

// here you can implode again:
$AssignedGroups = implode(';', $AssignedGroups);
// or even with another delimiter
$AssignedGroups = implode(',', $AssignedGroups);

摆弄implode例子。


推荐阅读