脚本宝典收集整理的这篇文章主要介绍了php – 将数组/对象树的键转换为小写,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
function keysToLower($obj) { if(!is_object($obj) && !is_array($obj)) return $obj; foreach($obj as $key=>$element) { $element=keysToLower($element); if(is_object($obj)) { $obj->{strtolower($key)}=$element; if(!ctyPE_lower($key)) unset($obj->{$key}); } else if(is_array($obj) && ctype_upper($key)) { $obj[strtolower($key)]=$element; unset($obj[$key]); } } return $obj; }
大部分时间都花在递归调用上(在PHP中很慢),但我没有看到任何方法将它转换为循环.
你会怎么做?
此版本不考虑关联数组,因为我的数据没有任何关联数组,但比原始版本快近10倍.大部分工作都是由Gumbo完成的,主要的加速来自于使用引用和创建新对象而不是取消旧键.
function &keysToLower(&$obj) { if(is_object($obj)) { $newobj = (object) array(); foreach ($obj as $key => &$val) $newobj->{strtolower($key)} = keysToLower($val); $obj=$newobj; } else if(is_array($obj)) foreach($obj as &$value) keysToLower($value); return $obj; }
function keysToLower($obj) { $type = (int) is_object($obj) - (int) is_array($obj); if ($type === 0) return $obj; reset($obj); while (($key = key($obj)) !== null) { $element = keysToLower(current($obj)); swITch ($type) { case 1: if (!is_int($key) && $key !== ($keyLowercase = strtolower($key))) { unset($obj->{$key}); $key = $keyLowercase; } $obj->{$key} = $element; break; case -1: if (!is_int($key) && $key !== ($keyLowercase = strtolower($key))) { unset($obj[$key]); $key = $keyLowercase; } $obj[$key] = $element; break; } next($obj); } return $obj; }
或使用引用来避免使用副本:
function &keysToLower(&$obj) { $type = (int) is_object($obj) - (int) is_array($obj); if ($type === 0) return $obj; foreach ($obj as $key => &$val) { $element = keysToLower($val); switch ($type) { case 1: if (!is_int($key) && $key !== ($keyLowercase = strtolower($key))) { unset($obj->{$key}); $key = $keyLowercase; } $obj->{$key} = $element; break; case -1: if (!is_int($key) && $key !== ($keyLowercase = strtolower($key))) { unset($obj[$key]); $key = $keyLowercase; } $obj[$key] = $element; break; } } return $obj; }
以上是脚本宝典为你收集整理的php – 将数组/对象树的键转换为小写全部内容,希望文章能够帮你解决php – 将数组/对象树的键转换为小写所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。