将数字键控元素附加到数字键控数组而不覆盖预先存在的元素

问题描述 投票:0回答:5

我一直在使用 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
)
php arrays key associative-array merging-data
5个回答
2
投票

这个?

foreach($results as $obj) {
   $contacts[] = (int) array_key_exists($obj['uid'], $contacts);
}

1
投票

这是一个 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 ) );

0
投票

你有没有尝试过类似的事情:

if (!isset($contacts[1]))
    $contacts[1] = 0;

0
投票

我会做:

foreach ($result as $uid => $res) {
if (!array_key_exists($uid, $contacts)) {
    $contacts[$uid] = 0;
 }
}

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,
    )
    */
    
© www.soinside.com 2019 - 2024. All rights reserved.