跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

PHP:递归删除多维数组中的 Null 和空值

本文介绍了如何在 PHP 中递归地从多维数组中删除 `null` 和空字符串值,同时保留值为 0 的元素。通过示例代码和详细解释,帮助开发者理解如何正确地处理多维数组,避免常见错误,并提供了一种高效的解决方案。 在 PHP 开发中,处理多维数组是很常见的任务。有时我们需要清理数组,移除其中不需要的 null 值或者空字符串,但又要保留有意义的零值。本文将提供一种递归方法,以实现此目的。 递归函数 实现 以下是一个用于递归删除多维数组中 null 和空字符串值的 PHP 函数:
&$value) { if (is_array($value)) { // 递归调用自身来处理子数组 $this->cleanArray($value); // 删除为空的子数组 if (empty($value)) { unset($data[$key]); } } elseif ($value === null || $value === '') { // 删除 null 或空字符串值 unset($data[$key]); } } return $data; } } // 示例用法 $dataPayment = [ "operationType" => null, "terminal" => 12345, "payment" => [ "terminal" => 12345, "order" => "1234519997", "amount" => 100, "currency" => "EUR", "secure" => 0, "idUser" => 123456789, "tokenUser" => "zidkeKeu68Kld", "urlOk" => null, "urlKo" => null, "originalIp" => "1.130.151.28", "methodId" => 1, "trxType" => "N", "userInteraction" => 1, "scaException" => "MIT" ], "subscription" => [ "startDate" => null, "endDate" => null ] ]; $helper = new ArrayHelper(); $cleanedArray = $helper->cleanArray($dataPayment); print_r($cleanedArray); ?>
代码解释: PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 立即学习 “ PHP免费学习笔记(深入) ”; cleanArray(array &$data) 函数: 接受一个数组作为参数,并且 使用引用传递 (&$data)。 这是至关重要的,因为它允许函数直接修改原始数组。 foreach 循环: 遍历数组中的每一个元素。 is_array($value) 检查: 如果当前元素是一个数组,则递归调用 cleanArray() 函数来处理该子数组。 $value === null || $value === '' 检查: 如果当前元素的值是 null 或者空字符串,则使用 unset() 函数删除该元素。 empty($value) 检查: 在递归调用返回后,检查子数组是否为空。如果为空,则从父数组中删除该子数组。 输出结果:
Array ( [terminal] => 12345 [payment] => Array ( [terminal] => 12345 [order] => 1234519997 [amount] => 100 [currency] => EUR [secure] => 0 [idUser] => 123456789 [tokenUser] => zidkeKeu68Kld [originalIp] => 1.130.151.28 [methodId] => 1 [trxType] => N [userInteraction] => 1 [scaException] => MIT ) )
注意事项 引用传递: 使用引用传递 (&$data) 是关键。 如果没有使用引用,unset() 函数将只会修改函数内部的数组副本,而不会影响原始数组。 类型严格比较: 使用 === 进行类型严格比较,以确保只有 null 值和空字符串被删除,而数值 0 不会被删除。 递归深度: 对于非常深的多维数组,递归可能会导致性能问题或者达到 PHP 的最大递归深度限制。 在处理大型数组时,需要注意这一点,并考虑使用迭代方法来替代递归。 empty() 函数: 确保在递归返回后检查子数组是否为空,并删除空数组。 总结 通过使用递归和引用传递,我们可以有效地从 PHP 多维数组中删除 null 和空字符串值,同时保留有意义的零值。 这种方法可以帮助清理数据,提高代码的可读性和可维护性。 在实际应用中,请根据数组的结构和大小,合理选择处理方法,并注意性能优化。

相关文章