我一直在使用 in_array 和 for 循环,但还没有完全能够完成我一直在尝试做的事情......
我有一个数组(名为 $contacts),如下所示:
Array
(
[3] => 1
[5] => 1
[7] => 1
)
我正在尝试根据查询结果添加其他键 => 值对:
//query results
+------+------+
| uid | nid |
+------+------+
| 1 | 24 |
| 3 | 23 |
| 4 | 22 |
| 5 | 28 |
| 6 | 29 |
| 7 | 30 |
| 8 | 27 |
+------+------+
我想做的是 if uid not 在 $contacts 数组键中,那么我想添加它的值“0”,这样最终结果是这样的:
Array
(
[3] => 1
[5] => 1
[7] => 1
[1] => 0
[4] => 0
[6] => 0
[8] => 0
)
也许我已经在这方面呆得太久了,因为这似乎真的很难做到,所以希望在退后一步并得到这里某人的帮助后,我会再次感觉正常......
这个?
foreach($results as $obj) {
$contacts[] = (int) array_key_exists($obj['uid'], $contacts);
}
这是一个 php 5.3 方法
$ar1 = array (
3 => 1,
5 => 1,
7 => 1
);
$q = array(
1 => 24,
3 => 23,
4 => 22,
5 => 28,
6 => 29,
7 => 30,
8 => 27
);
print_r( $ar1 + array_map( function($v){ return $v=0; }, $q ) );
你有没有尝试过类似的事情:
if (!isset($contacts[1]))
$contacts[1] = 0;
我会做:
foreach ($result as $uid => $res) {
if (!array_key_exists($uid, $contacts)) {
$contacts[$uid] = 0;
}
}
使用数字键时,了解主题相关的工具以及它们的行为有何不同非常重要。 演示
数组联合运算符只会追加键尚不存在的元素。
var_export($contacts + array_map(fn() => 0, $all_ids));
/*
array (
3 => 1,
5 => 1,
7 => 1,
1 => 0,
4 => 0,
6 => 0,
8 => 0,
)
*/
使用数组联合运算符反转数组的顺序不允许使用 all_ids 中的新元素,因为它们都已表示。
var_export(array_map(fn() => 0, $all_ids) + $contacts);
/*
array (
1 => 0,
3 => 0,
4 => 0,
5 => 0,
6 => 0,
7 => 0,
8 => 0,
)
*/
array_replace() 将允许覆盖预先存在的键值
var_export(array_replace(array_map(fn() => 0, $all_ids), $contacts));
/*
array (
1 => 0,
3 => 1,
4 => 0,
5 => 1,
6 => 0,
7 => 1,
8 => 0,
)
*/
array_merge() 将破坏数字关联键并无知地构建更长的数组
var_export(array_merge($contacts, array_map(fn() => 0, $all_ids)));
/*
array (
0 => 1,
1 => 1,
2 => 1,
3 => 0,
4 => 0,
5 => 0,
6 => 0,
7 => 0,
8 => 0,
9 => 0,
)
*/