Jadual Kandungan
1. Avoid Modifying Arrays In Place
2. Use array_merge() for Clean Immutable Updates
3. Handle Nested Updates with Pure Functions
4. Combine with Functional Helpers
5. Embrace Immutability by Convention
Rumah pembangunan bahagian belakang tutorial php Seni kemas kini array yang tidak berubah menggunakan php berfungsi

Seni kemas kini array yang tidak berubah menggunakan php berfungsi

Aug 05, 2025 pm 12:30 PM
PHP Update Array Items

要实现PHP中的不可变数组更新,必须通过创建新数组而非修改原数组来完成,1. 避免直接修改数组元素,应使用array_merge()或手动复制生成新数组;2. 使用array_merge()进行简洁的不可变更新,保持原数组不变并支持添加新键;3. 对嵌套数组使用纯函数如递归setIn()函数,确保深层结构更新时不产生副作用;4. 结合array_map、array_filter等函数式工具,实现无副作用的数据处理;5. 通过约定强化不可变性,如将输入数组视为只读、返回新数组、使用PHP 8.2+的readonly类或DTO封装数据。这种方法提升了代码的可预测性、可维护性和可测试性,最终实现更安全的状态管理。

The Art of Immutable Array Updates Using Functional PHP

Immutable array updates in PHP might sound like a concept borrowed from functional programming languages like Haskell or Elm, but you can apply the same principles effectively even in PHP—especially as the language matures with features supporting functional patterns.

The Art of Immutable Array Updates Using Functional PHP

The core idea is simple: instead of modifying an array in place, you create a new array that includes the desired changes, leaving the original untouched. This leads to more predictable code, easier debugging, and fewer side effects—especially valuable in larger applications or when working with state in a functional style.

Here’s how to master immutable array updates in PHP using functional techniques.

The Art of Immutable Array Updates Using Functional PHP

1. Avoid Modifying Arrays In Place

In traditional PHP, you might do something like:

$user = ['name' => 'Alice', 'age' => 30];
$user['age'] = 31; // Mutation!

This mutates the original array. Instead, create a new version:

The Art of Immutable Array Updates Using Functional PHP
$user = ['name' => 'Alice', 'age' => 30];
$newUser = ['name' => $user['name'], 'age' => $user['age'] + 1];

Now $user remains unchanged, and $newUser reflects the update.

But manually copying keys gets tedious. Use the spread-like behavior of + or array_merge().


2. Use array_merge() for Clean Immutable Updates

array_merge() is your go-to tool for creating updated copies:

$user = ['name' => 'Alice', 'age' => 30];
$updatedUser = array_merge($user, ['age' => 31]);

This returns a new array. The original $user is untouched.

You can also add new keys:

$extendedUser = array_merge($user, ['active' => true]);

Important: array_merge() only works reliably with indexed or associative arrays, not complex nested structures unless handled recursively.


3. Handle Nested Updates with Pure Functions

For nested arrays, immutability requires deeper care. Don’t do this:

$data['user']['profile']['theme'] = 'dark'; // Mutation!

Instead, build a pure function to return a new structure:

function withUpdatedTheme(array $data, string $theme): array
{
    return array_merge($data, [
        'user' => array_merge($data['user'], [
            'profile' => array_merge($data['user']['profile'], [
                'theme' => $theme
            ])
        ])
    ]);
}

Usage:

$newData = withUpdatedTheme($data, 'dark');

Now $data is preserved, and changes are encapsulated in a reusable, testable function.

For deeply nested data, consider writing a generic setIn() function:

function setIn(array $array, array $path, $value): array
{
    $result = $array;
    $cursor = &$result;

    foreach ($path as $key) {
        if (!is_array($cursor)) {
            $cursor = [];
        }
        $cursor = &$cursor[$key];
    }

    $cursor = $value;

    return $result;
}

Wait—this uses references and mutates $result. Not pure.

Here’s a truly immutable version:

function setIn(array $array, array $path, $value): array
{
    if (empty($path)) {
        return $array;
    }

    $key = array_shift($path);
    if (!empty($path)) {
        $nested = $array[$key] ?? [];
        if (!is_array($nested)) {
            $nested = [];
        }
        $array[$key] = setIn($nested, $path, $value);
    } else {
        $array[$key] = $value;
    }

    return $array;
}

Now you can do:

$newData = setIn($data, ['user', 'profile', 'theme'], 'dark');

And $data remains unchanged.


4. Combine with Functional Helpers

To make this style more expressive, pair immutable updates with functional helpers.

For example, map over arrays without mutation:

$users = [['name' => 'Alice', 'age' => 30], ['name' => 'Bob', 'age' => 25]];

$usersAgedUp = array_map(
    fn($user) => array_merge($user, ['age' => $user['age'] + 1]),
    $users
);

Or filter:

$activeUsers = array_filter($users, fn($user) => $user['active'] ?? false);

These don’t alter the original $users array—pure and predictable.


5. Embrace Immutability by Convention

PHP doesn’t enforce immutability, so discipline matters. Tips:

  • Treat arrays passed into functions as read-only.
  • Return new arrays instead of modifying inputs.
  • Use readonly classes (PHP 8.2+) when modeling data structures.
  • Consider using value objects or DTOs for complex data.

Example with a readonly class:

readonly class User
{
    public function __construct(
        public string $name,
        public int $age
    ) {}
}

function withAgeIncreased(User $user, int $by = 1): User
{
    return new User($user->name, $user->age + $by);
}

Now immutability is enforced at the object level.


Immutable array updates in PHP aren’t automatic, but with array_merge(), pure functions, and functional thinking, you can write safer, more maintainable code. It’s not about copying everything—it’s about control, clarity, and avoiding unintended consequences.

Basically, if you treat data as if it can’t be changed, you’ll write better PHP.

Atas ialah kandungan terperinci Seni kemas kini array yang tidak berubah menggunakan php berfungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Skop pembolehubah PHP dijelaskan
1 bulan yang lalu By 百草
Mengulas kod dalam php
1 bulan yang lalu By 百草
Petua untuk menulis komen php
1 bulan yang lalu By 百草

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1511
276
Mengemas kini array php berdasarkan nilai dari array lain Mengemas kini array php berdasarkan nilai dari array lain Aug 02, 2025 am 12:51 AM

Gunakan array_merge () untuk hanya menulis ganti nilai array kedua untuk mengemas kini array asal; 2. Gunakan pengendali kesatuan () untuk mengekalkan nilai array asal dan menambah kekunci yang hilang (sesuai untuk menetapkan nilai lalai); 3. Kawalan halus boleh dicapai melalui foreach yang digabungkan dengan syarat-syarat, seperti mengemaskini hanya nilai non-null; 4. Untuk susunan bersarang, array_replace_recursive () harus digunakan untuk mencapai kemas kini yang mendalam; 5. Apabila mengemas kini, array_key_exists () atau isset () harus selalu digunakan untuk memeriksa dengan selamat kewujudan kunci untuk mengelakkan kesilapan; Kaedah ini merangkumi senario utama pengemaskinian susunan berdasarkan array lain dalam PHP, dan kaedah yang sesuai harus dipilih mengikut struktur data dan logik untuk memastikan operasi

Menyelam jauh ke `array_walk` untuk transformasi array kompleks Menyelam jauh ke `array_walk` untuk transformasi array kompleks Aug 02, 2025 pm 03:28 PM

Array_Walk adalah fungsi yang kuat dalam PHP untuk mengubahsuai elemen array di tempat. Ia sesuai untuk senario di mana transformasi kompleks diperlukan berdasarkan nama utama, struktur bersarang, atau keadaan luaran. 1. Ia melewati tatasusunan dan elemen melalui rujukan dan secara langsung mengubah suai array asal; 2. Fungsi panggil balik boleh mengakses kekunci dan nilai dan menyokong konteks lulus parameter ketiga; 3. Ia boleh memproses susunan pelbagai dimensi dalam kombinasi dengan rekursi; 4. Ia sesuai untuk pengubahsuaian batch sifat objek; 5. Ia tidak mengembalikan array baru, dan prestasinya lebih baik daripada array_map tetapi tidak sesuai untuk senario di mana array asal perlu dikekalkan. Apabila digunakan dengan betul, ia berfungsi dengan cekap dan mempunyai kod bersih dalam mengendalikan transformasi data sensitif konteks atau rekursif.

Teknik lanjutan untuk mengemas kini susunan PHP pelbagai dimensi Teknik lanjutan untuk mengemas kini susunan PHP pelbagai dimensi Aug 03, 2025 am 06:26 AM

UserecursiveFunctionSafelyTraverseAdupDatenestedArraySwithUnknDepthByCreatingSingSingKeyseSneed.2.LeverAgeArrayReferenceWithThe

Mengoptimumkan operasi kemas kini array berskala besar untuk memori dan kelajuan Mengoptimumkan operasi kemas kini array berskala besar untuk memori dan kelajuan Aug 02, 2025 am 02:08 AM

Tooptimizelarge-scalearrayupdates:1.Mutatearraysinplaceinsteadofcreatingcopiesusingspreadorconcattoreducememoryusage;2.Batchupdatestominimizefunctioncalloverhead,pre-allocatearrayswhensizeisknown,andchunklargeinsertionstoavoidcallstacklimits;3.Usetyp

Pengubahsuaian Arus Dinamik: Menambah atau Mengemas kini Elemen dengan cepat Pengubahsuaian Arus Dinamik: Menambah atau Mengemas kini Elemen dengan cepat Aug 02, 2025 pm 03:37 PM

DynamicArraySallowRuntimeModificationByAddingOrupdatingElements, withbestPracticeseSensuringeficiencyandsafety.1) usepush/appendtoaddelementsattheendforoptimalperpformance.2) mengelakkan/insertormiddleinsertionswhenpossible, astheyrequireshiffififfiffiffiffiffiffiffiFiffiFiffiFiFifeSa

Seni kemas kini array yang tidak berubah menggunakan php berfungsi Seni kemas kini array yang tidak berubah menggunakan php berfungsi Aug 05, 2025 pm 12:30 PM

Untuk merealisasikan kemas kini array yang tidak berubah di PHP, ia mesti dilakukan dengan membuat array baru dan bukannya mengubah suai array asal. 1. Elakkan secara langsung mengubah suai elemen array. Anda harus menggunakan array_merge () atau salinan secara manual untuk menghasilkan array baru; 2. Gunakan array_merge () untuk melakukan kemas kini yang tidak berubah ringkas, menjaga array asal tidak berubah dan menyokong penambahan kunci baru; 3. Gunakan fungsi tulen seperti set Rekursif () untuk array bersarang untuk memastikan tiada kesan sampingan apabila struktur dalam dikemas kini; 4. Digabungkan dengan alat berfungsi seperti array_map dan array_filter untuk mencapai pemprosesan data tanpa kesan sampingan; 5. Menguatkan kebolehubahan melalui konvensyen, seperti merawat array input sebagai baca sahaja, mengembalikan array baru, dan menggunakan Reado dalam Php8.2

Menguasai kemas kini array di tempat dengan rujukan PHP Menguasai kemas kini array di tempat dengan rujukan PHP Aug 05, 2025 pm 04:46 PM

Gunakan rujukan PHP untuk mencapai kemas kini dalam situ array, mengelakkan salinan overhead dan meningkatkan prestasi. 1. Gunakan & pengendali untuk membuat rujukan supaya pembolehubah menunjuk ke data yang sama, dan pengubahsuaian dicerminkan kepada array asal; 2. Apabila memproses susunan bersarang, dapatkan rujukan elemen yang mendalam melalui &, dan secara langsung mengubahnya tanpa menugaskan semula; 3. Penggunaan & $ item dalam gelung foreach untuk mengubah suai elemen array asal, tetapi tidak bersesuaian ($ item) mestilah tidak jelas ($ item) selepas gelung untuk mengelakkan kesan sampingan berikutnya; 4. Anda boleh menulis fungsi untuk mengembalikan rujukan yang mendalam melalui laluan dinamik, yang sesuai untuk pengurusan konfigurasi dan senario lain; 5. Walaupun rujukan adalah cekap, mereka harus digunakan dengan berhati -hati untuk mengelakkan kod overcomplex, pastikan logik itu jelas dan komen ditambah jika perlu. Penggunaan rujukan yang betul dapat mengoptimumkan saiz yang besar

Panduan untuk mengubah suai tatasusunan objek dalam php Panduan untuk mengubah suai tatasusunan objek dalam php Aug 04, 2025 am 12:38 AM

ArraysOfObjectSinphpontainClassInstances, membolehkanDirectPropertyormeThod-berasaskanModifications; 2.updatepropertiesingForeachLoopsSinceObjectSarePassedBereference, oruseSettersforencapsulatedProperties;

See all articles