分享一个函数,求bug,求改进^_^
我们phper经常会用到很多对数字或字符串的处理函数
遗憾的是大部分都不支持数组
灵光一闪,搞定它
觉得有用的大大们捧个场
顺便找些bug并给些改进的建议
/** * 通过递归调用让函数支持多维数组 by wanderwind * 建议其他函数调用来实现 * @param string $fn 调用函数名称 * @param array $param 参数数组,通常传入func_get_args() * @param int $key 需要递归的参数键值 * @param boolean $check 是否需要检测函数合法性 * @return mixed 返回对$param[$key]的运行结果 */function fn2array($fn, $param, $key = 0, $check = true) { //从外部调用时默认检测函数合法性,多维数组递归时忽略 if ($check && !function_exists($fn)) { return false; } //提取执行目标,如果目标非数组可以直接执行 $content = $param[$key]; if (!is_array($content)) { return call_user_func_array($fn, $param); } //如果目标是数组则递归执行 foreach ($content as &$val) { $param[$key] = $val; $val = fn2array($fn, $param, $key, false); } return $content;}function wstripslashes() { return fn2array('stripslashes', func_get_args());}function wsubstr() { $param = func_get_args(); $param[3] = isset($param[3]) ? $param[3] : 'utf-8'; return fn2array('mb_substr', $param, 0);}$a = array( 2 => '\"aaaaaaaaaaaaaaa\"', array('\"啊啊啊啊啊啊啊啊啊啊啊啊啊\"'), array(array(array('\"sss\dasf\dasfasdsad\"'))),);print_r(wstripslashes($a));print_r(wsubstr($a, 2, 5));
回复讨论(解决方案)
发完帖子想到一个改进方向,例如我们经常从数据库筛选出一个结果集数组,可能需要单独对某几个字段过滤
例如对title和content单独进行stripslashes
接口可以设计为 wstripslashes($data, 'title,content')
这样的话需要多一步对键值的判定
您忘了 php 的 array_walk_recursive 函数
您忘了 php 的 array_walk_recursive 函数
确实有个不爱看手册的坏毛病
但是刚刚翻了一下,我粗浅的觉得这个函数可能无法满足需求
1,如何支持多维数组?
2,如何用它递归iconv('gbk', 'utf-8', $str)这种函数?
因为没使用过这个函数,可能需要麻烦斑竹写个示例
$ar = array( array('汉字'), array('汉字'), array( array('汉字'), array('汉字'), array( array('汉字'), array('汉字'), ), ),);function zm(&$v, $k, $charset) { $v = iconv($charset[0], $charset[1], $v);}array_walk_recursive($ar, 'zm', array('gbk', 'utf-8'));print_r($ar);
??支持下。
$ar = array( array('汉字'), array('汉字'), array( array('汉字'), array('汉字'), array( array('汉字'), array('汉字'), ), ),);function zm(&$v, $k, $charset) { $v = iconv($charset[0], $charset[1], $v);}array_walk_recursive($ar, 'zm', array('gbk', 'utf-8'));print_r($ar);
感谢xu大,又学到东西了
用系统提供的函数或许性能会强一些
但结合开发体验,我还是想支持自己的方法
array_walk_recursive对原数据是引用,而且参数传递方法比较死,如果想不污染$ar,同时让开发者使用便利,就要再定义一个函数
function zm(&$v, $k, $charset) { $v = iconv($charset[0], $charset[1], $v);}function wiconv($in, $out, $content) { array_walk_recursive($content, 'zm', array($in, $out)); return $content;}
其实这样的wiconv也不行,还要加入$content本身就是字符串的判定条件~
我是希望有一种快速创建新函数,并且不改变原函数使用习惯的方法,貌似有点面向对象的继承思想?
比如我的方法中 iconv可以这样扩展:
function wiconv() { //2代表递归第三个参数是目标 return fn2array('iconv', func_get_args(), 2);}$ar = array('汉字', array(array('汉字')));print_r(wiconv('utf-8', 'gbk', $ar)); //不改变原函数使用习惯
您觉得呢
??支持下。
function wiconv($in_charset, $out_charset, $str) { if(is_array($str)) { array_walk_recursive($str, function(&$v, $k, $p) { $v = iconv($p[0], $p[1], $v); }, array($in_charset, $out_charset)); return $str; } return iconv($in_charset, $out_charset, $str);}
又想起了那句著名的话:重复造轮子的人呐
不是很明白函数的意思,不过还是进来看看
又想起了那句著名的话:重复造轮子的人呐
前人的轮子不好,咱就努力造个更好的,即便实际做出来很糟糕,这也是造出更好轮子的第一步~你说呢
造轮子没有什么不好,选好材料和工艺才能事半功倍

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'extension PHP Client URL (CURL) est un outil puissant pour les développeurs, permettant une interaction transparente avec des serveurs distants et des API REST. En tirant parti de Libcurl, une bibliothèque de transfert de fichiers multi-protocol très respectée, PHP Curl facilite Efficient Execu

Alipay Php ...

Voulez-vous fournir des solutions instantanées en temps réel aux problèmes les plus pressants de vos clients? Le chat en direct vous permet d'avoir des conversations en temps réel avec les clients et de résoudre leurs problèmes instantanément. Il vous permet de fournir un service plus rapide à votre personnalité

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

L'article traite des fonctionnalités de sécurité essentielles dans les cadres pour se protéger contre les vulnérabilités, notamment la validation des entrées, l'authentification et les mises à jour régulières.

L'article examine l'ajout de fonctionnalités personnalisées aux cadres, en se concentrant sur la compréhension de l'architecture, l'identification des points d'extension et les meilleures pratiques pour l'intégration et le débogage.

Envoyant des données JSON à l'aide de la bibliothèque Curl de PHP dans le développement de PHP, il est souvent nécessaire d'interagir avec les API externes. L'une des façons courantes consiste à utiliser la bibliothèque Curl pour envoyer le post� ...
