如何在现有数组中追加数据而不覆盖整个数组

3
这是我的代码,在这段代码中,我通过一个名为read_from_json的函数读取了一个已有的数组,该函数将JSON转换成数组。现在,我从远程数据源获取到了新的数据,因此我需要将这些数据添加到已有的数组中,而不是覆盖整个数组。例如,如果我得到了一个ID,我会使用in_array函数进行搜索,如果没有找到,则发送一条消息给它,然后将特定的条目附加到现有数组中。由于foreach迭代的问题,它会覆盖整个数组,我应该怎么办呢?请看一下这段代码:
$read_data = $this->read_from_json( 'xyz.json' );

foreach ( $projects_id_tickcamp as $tick_id => $base_id ) {

            if ( !$this->in_array( $base_id['base_id'], $read_data ) ) {

                echo '<b>do post message function for ' . $tick_id . ' ' . $base_id['base_id'] . '</b><br />';

                $i = count( $read_data );

                while ( $i >= count( $base_id['base_id'] ) ) {

                    echo 'post message start' .'<br />';
                    $i++;
                    break;
                    $projects_id_tickcamp[$tick_id]['message_id'] = 1;

                }

                //echo 'posted message id of ' . $base_id['basecamp_id'] . '<br />';
            } else {
                echo 'do nothing' . '<br />';
                //return false;
            }
        }

        //echo 'write data if id similar' . '<br />';
        $this->write_to_json( 'xyz.json', $projects_id_tickcamp );
        return $projects_id_tick;

以上代码的输出如下所示:
Array
(
    [125434] => Array
        (
            [base_id] => 1306755
        )

    [127354] => Array
        (
            [base_id] => 1287834
        )

)

如果从远程获取新的ID,则只将ID写入数组的最后一个位置。


1
请参考我的示例或访问:http://in3.php.net/manual/zh/function.array-merge.php - Manoj
3个回答

12

我正在使用array_merge,但它会重新索引数组键,而我希望我的键保持唯一的ID。另一方面,如果我使用array_push,它可以工作,但会创建一个新的数组并添加元素,这不是我想要的。 - Shashank
那为什么不这样做呢:$existingArray[ $newKey ] = $newValue - Barry Chapman
看,我正在遍历我的现有数组并将其与新元素进行比较,如果有新元素,则要将其附加到数组中,它确实会附加,但覆盖以前的元素。 - Shashank
嘿,我正在我的代码中做一些事情,简单的数组[]对我很有用。 - Shashank
1
$array[] = $newValue 对我来说似乎不合逻辑,但是ChatGPT向我保证它是正确的。我来这里寻求第二个意见...看起来我得到了我需要的人类支持,谢谢Barry。 - hamish

3

在返回其他值后,使用array_merge将修复此问题。

例如:

$result_array=array_merge($arr1,$arr2);

我应该创建另一个数组来存储最新的 ID 数组,然后将其与原始数组合并吗? - Shashank
yes.array_merge函数只接受数组作为输入。 - Manoj
嘿,谢谢,对我有效,但是它需要一些时间,我必须优化它以实现快速执行。至少覆盖问题已经解决。 - Shashank
嘿,数组合并重新索引键,但我需要我的键,它是进一步工作所必需的唯一标识符。 - Shashank

0
如果你想将一些内容添加到 PHP 数组中,你可以使用 $myArray[] = "new value"

1
之前的数组是这样构建的:$projects_id_tickcamp[$tick_id]['base_id'] = value;,如果我得到了新的ID,那么我必须通过$projects_id_tickcamp[$tick_id]['basecamp_id'] = new value来追加它,但是foreach会覆盖整个数组。 - Shashank
1
@shihon 那就不要覆盖数组,继续使用旧的数组。当数组键不存在时,只需追加即可。 - Flame

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接