PHP多维数组元素操作类的方法
我的框架里面一个多维数组元素操作类,主要用于读取数组中配置数据,可以通过字符串节点的方式:a.b.c 来获取和设置元素,以及多维数组的覆盖,有需求的可以参考下吧!
<?php /** * Created by PhpStorm. * User: ZHOUZ * Date: 14-5-25 * Time: 下午5:32 */ namespace Snail\Component; /** * 多维数组节点读写 * Class Node * @package Snail\Component */ class Node extends AComponent { /** * 多维数组节点分隔符 * @var string */ const SP = '.'; /** * 将非字符串类型数据生成字符串节点 * <code> * Node::create(array('a', 'b', 1, true)) => 'a.b.1.1' * Node::create('a', 'b', null, false) => 'a.b' * </code> * @param mixed $nodes 支持数组、任意参数个数 * @return string */ public static function create($nodes) { ! is_array($nodes) && $nodes = func_get_args(); return join(static::SP, array_filter(array_map('strval', $nodes))); } /** * 获取多维数组节点转化为数组键名 * @param string $node * @return array */ public static function explode($node) { return explode(static::SP, $node); } /** * 设置多维数组节点值 * 注意: * 由于 PHP 数组数值键名长度只支持 int 的最大长度, * 为避免出现覆盖等混乱现象,所有节点在转化为键名时都将 * 强制被转换为字符串类型 * @param array & $arr 引用被操作数组的内存地址 * @param string $node 节点路径, 如: a.b.c => $arr['a']['b']['c']; * @param mixed $value * @return void */ public static function set(array & $arr, $node, $value = null) { $arr = $arr2 = (array) $arr; $keys = static::explode($node); foreach ($keys as $key) { $key = strval($key); if (isset($arr[$key])) { $arr = & $arr[$key]; } else { $arr[$key] = array(); $arr = & $arr[$key]; } } $arr = $value; } /** * 获取多维数组指定节点值 * @param array & $arr 引用被操作数组的内存地址 * @param string $node 节点路径, 如: a.b.c => $arr['a']['b']['c']; * @param null|mixed $default 若节点不存在时返回该默认值 * @return mixed */ public static function get(array & $arr, $node, $default = null) { if (empty($arr)) return $default; $keys = static::explode($node); foreach ($keys as $key) { $key = strval($key); if (isset($arr[$key])) { $arr = & $arr[$key]; } else { return $default; } } return $arr; } /** * 将第二个多维数组覆盖或添加到第一个多维数组进行合并 * @param array & $arraySrc 引用被更新的数组 * @param array & $arrayReplace 引用需要合并的数据 * @return void 地址操作无返回值 */ public static function merge(array & $arraySrc, array & $arrayReplace) { if (empty($arrayReplace)) return; foreach ($arrayReplace as $k=>& $v) { if (is_array($v) && isset($arraySrc[$k])) { static::merge($arraySrc[$k], $v); } else { $arraySrc[$k] = $v; } } } /** * 判断多维数组中是否存在指定节点, * 结果同 isset 关键字 (若存在键但值为 NULL 则也会返回 false) * @param array & $arr 引用原数组 * @param string $node * @return bool */ public static function has(array & $arr, $node) { if (empty($arr)) return false; $keys = static::explode($node); foreach ($keys as $key) { $key = strval($key); if (isset($arr[$key])) { $arr = & $arr[$key]; } else { return false; } } return true; } /** * 判断多维数组中是否存在指定键 * @param array & $arr 引用原数组 * @param string $node * @return bool */ public static function hasKey(array & $arr, $node) { if (empty($arr)) return false; $keys = static::explode($node); foreach ($keys as $key) { $key = strval($key); if (array_key_exists($key, $arr)) { $arr = & $arr[$key]; } else { return false; } } return true; } /** * 注销数组中的指定节点元素 * @param array $arr * @param string $node * @return void */ public static function clear(array & $arr, $node) { if (empty($arr)) return; $keys = static::explode($node); foreach ($keys as $key) { $key = strval($key); if (isset($arr[$key])) { $arr = & $arr[$key]; } else { return; // 指定节点不存在亦认为是成功 } } $arr = null; unset($arr); } }
下面举个栗子:
<?php echo '<pre class="brush:php;toolbar:false">'; // 测试数组1 $arr1 = ['a'=>['b'=>['c'=>['d'=>['e'=>['f'=>'http://blog.csdn.net/zhouzme']]]]]]; // 测试数组2 $arr2 = ['a'=>['b'=>['c'=>['h'=>['i'=>['j'=>'http://www.hihtml5.com/']]]]]]; echo '读取已存在的多维元素: '; echo Node::get($arr1, 'a.b.c.d.e.f', '默认值'); // http://www.php.cn/ echo '<hr>'; echo '读取不存在的多维元素: '; echo Node::get($arr1, 'a.b.c.d.e.g', '默认值'); // 默认值 echo '<hr>'; echo '新增多维元素: '; Node::set($arr1, 'a.b.c.d.e.g', 'http://www.ai9475.com/'); print_r($arr1); echo '<hr>'; echo '读取新增的多维元素: '; echo Node::get($arr1, 'a.b.c.d.e.g', '默认值'); // http://www.php.cn/ echo '<hr>'; echo '合并两个数组<br>'; Node::merge($arr1, $arr2); print_r($arr1);
下面是对应的输出结果:
以上就是PHP多维数组元素操作类的方法 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
