我在下面的数组中使用了array_merge_recursive:
数组([111-23456-789] => 0 [2380600] => 1963 [8123123] => 0 ...)
数组([111-23456-789] => 0 [2380600] => 3860 [8123123] => 0 ...)
注意:因为array_merge_recursive适用于字符串键,所以上面数组的键实际上是另一个数组的字符串类型值。此外,数组实际上比这大,因此在数组的结束括号之前的'...'。
预期输出(根据我在W3Schools.com和php.net中的理解):
数组([111-23456-789] =>数组([0] => 0 [1] => 0)[2380600] =>数组([0] => 1963 [1] => 3860)[8123123] =>数组([0] => 0 [1] => 0)......)
相反,我得到了这个废话:
数组([111-23456-789] =>数组([0] => 0 [1] => 0)[0] => 1963 [1] => 0 [2] = > 365 ...)
以下是我获取数组键的方法:
while ($nrows = mysqli_fetch_assoc($resultSetNames)) {
$name = $nrows['name'];
array_push($arrayNamesRes, "$name");
}
这就是我制作第一个关联数组的方法:
$nov = 0;
while ($novrows = mysqli_fetch_assoc($resultSetNov)) {
$counter = $novrows['count(playsms_tblsmsoutgoing.uid)'];
$arrayNovRes[$arrayNamesRes[$nov]] = $counter;
$nov++;
}
...和我的第二个关联数组:
$dec = 0;
while ($decrows = mysqli_fetch_assoc($resultSetDec)) {
$counter = $decrows['count(playsms_tblsmsoutgoing.uid)'];
$arrayDecRes[$arrayNamesRes[$dec]] = $counter;
$dec++;
}
我可以做些什么来获得预期的输出?我仍然是使用stackoverflow的新手。如果这篇文章太模糊,请说明。提前谢谢。
答案 0 :(得分:0)
这可以通过多种方式完成,请看下面的解决方案:
1)如果两个阵列在同一位置具有相同的键,则使用array_map
函数:
$array1 = array ( '111-23456-789' => 0, '2380600' => 1963, '8123123' => 0);
$array2 = array ( '111-23456-789' => 0, '2380600' => 3860, '8123123' => 0);
$new_array = array_map(function($a, $b, $key){
return array($key => array($a, $b));
}, $array1, $array2, array_keys($array1));
$new_array = call_user_func_array('array_merge', $new_array);
print_r($new_array);
2)如果按键不在同一位置,请使用传统方式,即foreach循环,如下所示:
$new_array = array();
foreach($array1 as $key => $value){
$new_array[$key][] = $value;
if(isset($array2[$key])){
$new_array[$key][] = $array2[$key];
}
}
print_r($new_array);
<强>输出:强>
Array
(
[111-23456-789] => Array
(
[0] => 0
[1] => 0
)
[2380600] => Array
(
[0] => 1963
[1] => 3860
)
[8123123] => Array
(
[0] => 0
[1] => 0
)
)
答案 1 :(得分:0)
问题是,即使您的密钥表示为字符串,并且仅由数字组成,PHP也会将它们视为数字键。你可以做的是在键名中添加一个非数字字符,即最后一个空格,这将迫使PHP将键视为字符串。当然这当然有点hacky。
以下是关于如何执行此操作的建议:
$merged = [];
foreach ($firstArray as $key => $value) {
if (array_key_exists($key, $secondArray)) {
// key exists in second array as well, merge the values
$merged[$key] = [$value, $secondArray[$key]];
} else {
// not found in second array, just overwrite to the merged array
$merged[$key] = $value;
}
}
或者可以在这个问题的接受答案中找到的可以找到密钥的小巧方法:PHP's array_merge_recursive behaviour on integer keys