首先,我假设您正在传递问题顶部显示的数组。因此将采用以下形式:
$array = [
['AA' => 111],
['AB' => 111],
['AC' => 111],
['AD' => 111],
['AE' => 111],
['AA' => 112]
];
假设这是正确的,那么您的 if 语句不起作用:
$array[0] == $source_id && $array[1] !== $source_number
// $array[0] && $array[1] simply don't exist! Referencing them should
// throw a notice in PHP...
// In the first foreach loop $array looks as follows
$array = ['AA' => 111];
// In the second loop it will be
$array = ['AB' => 111];
// and so on through the array. The index, in this case, is AA, AB, AC etc.
// the indexes 0 and 1 just don't exist
在这种情况下,我们可以开始修复您的代码,方法是将 if 语句修改为:
key($array) == $source_id && current($array) !== $source_number
当然我们还需要更新这两行:
foreach ($array1 as $array)
$array1[1] = $source_number;
收件人:
foreach ($array1 as &$array)
$array = [$source_id => $source_number];
所以,您的代码现在部分工作;如果我们调用该函数,它将更新现有的 ID 值,但不会添加新的值...
// Notice we pass $array by reference( & ) so that it updates the original array
// if you prefer not to do this then, obviously, you need to return the updated array
function addToken(&$array, $source_id, $source_number)
{
if (!empty($array)) {
foreach ($array as &$arr) {
if(key($arr) == $source_id && current($arr) != $source_number) {
$arr = [$source_id => $source_number];
}
}
}
}
addToken($array, "AB", 112);
// Updated array...
$array = [
['AA' => 111],
['AB' => 112],
['AC' => 111],
['AD' => 111],
['AE' => 111],
['AA' => 112]
];
添加不存在的项目
为此,我们需要首先查看整个数组,看看是否有匹配项,如果没有,最后添加一个新项。
function addToken(&$array, $source_id, $source_number)
{
if(!empty($array)){
$tokenExists = false;
foreach($array as &$arr){
if(key($arr) == $source_id){
$arr = [$source_id => $source_number];
$tokenExists = true;
}
}
if(!$tokenExists){
$array[] = [$source_id => $source_number];
}
}
}
注意,我们不需要检查值是否与$source_number 匹配,我们只需将值更新为$source_number,无论哪种方式我们都会得到相同的结果。
但是除非您的输入数组中有重复项(如图所示,在我上面使用的示例中故意显示),其中原始数组中的 ID 可能有多个值,所有这些值都需要更新到新的。这个@TP没有必要有任何正确的想法!
将格式简化为:
$array = [
'AA' => 111, // Note this value is effectively overwritten by the last line of the arrray, you can't have duplicate keys
'AB' => 111,
'AC' => 111,
'AD' => 111,
'AE' => 111,
'AA' => 112
];
function addToken(&$array, $source_id, $source_number)
{
$array[$source_id] = $source_number;
}
虽然,有了这个简化的数组......你甚至需要把更新放在一个函数/方法中吗?我想这取决于您的其余代码。