как добавить данные в существующий массив без перезаписи всего массива

Это мой код, в этом коде я читаю существующий массив через функцию read_from_json, которая преобразует JSON в массив, теперь из удаленных данных я получаю новые данные, поэтому Я должен добавить эти данные в свой существующий массив, не перезаписывая весь массив. Например, если я получаю идентификатор, он выполняет поиск с использованием функции 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
        )

)

если новый идентификатор извлекается с удаленного устройства, тогда идентификатор записывается только в последнее место массива.


person Shashank    schedule 15.10.2012    source источник
comment
обратитесь к моему примеру ниже/или посетите:in3.php.net/manual/ ru/function.array-merge.php   -  person Manoj    schedule 15.10.2012


Ответы (3)


У вас есть несколько вариантов:

Удачи!

person Barry Chapman    schedule 15.10.2012
comment
я использую array_merge, но он переиндексирует ключи массива, и я хочу, чтобы мои ключи были уникальными. С другой стороны, если я использую array_push, он работает, но сам создает новый массив с другим ключом и добавляет элемент, который мне не нужен. - person Shashank; 15.10.2012
comment
Тогда почему бы не сделать $existingArray[$newKey] = $newValue - person Barry Chapman; 15.10.2012
comment
Смотрите, я повторяю свой существующий массив и сравниваю его с новым элементом, если есть новый элемент, то я хочу добавить к нему, и он добавляет, но перезаписывает предыдущий элемент - person Shashank; 15.10.2012
comment
Эй, я делаю кое-что в своем коде, и простой массив [] работает для меня. - person Shashank; 16.10.2012

после возврата другого значения использование array_merge исправит это.

пример:

$result_array=array_merge($arr1,$arr2);
person Manoj    schedule 15.10.2012
comment
Должен ли я создать еще один массив для хранения последнего массива идентификаторов, а затем объединить его с прежним массивом? - person Shashank; 15.10.2012
comment
Функция yes.array_merge принимает на вход только массивы. - person Manoj; 15.10.2012
comment
эй, спасибо, у меня это работает, но это занимает некоторое время, мне нужно оптимизировать его для быстрого выполнения. По крайней мере, проблема с перезаписью решена. - person Shashank; 15.10.2012
comment
Эй, ключи переиндексации слияния массива, но мне нужны мои ключи, его уникальный идентификатор, который необходим для дальнейшей работы - person Shashank; 15.10.2012

Если вы хотите добавить что-то в массив PHP, вы можете использовать $myArray[] = "new value"

person Flame    schedule 15.10.2012
comment
предыдущий массив, созданный с помощью этого: $projects_id_tickcamp[$tick_id]['base_id'] = значение;, если я получил новый идентификатор, мне нужно добавить его через $projects_id_tickcamp[$tick_id]['basecamp_id'] = новое значение, но foreach перезаписывает весь массив - person Shashank; 15.10.2012
comment
@shihon тогда не перезаписывайте массив и используйте старый. просто добавьте, когда array_key не существует - person Flame; 15.10.2012