您的位置:时时app平台注册网站 > web前端 > 详明WordPress中用来合成数组的wp_parse_args()函数

详明WordPress中用来合成数组的wp_parse_args()函数

2019-11-02 01:15

URLSearchParams()是个构造函数,将返回一个可以操作查询字符串的对象。

默认值:空字符串

var str ="helloWorld";
// 一个参数,则将字符串长度作为结束位置
alert(str.substr(3)); // "loWorld"
// 两个参数,从位置3开始截取后面7个字符
alert(str.substr(3,7)); // "loWorld" 

2、获取查询字符串参数

// current url: https://www.abc.com?a=1&b=2 
const query = new URLSearchParams(location.search);
query.get("a"); // "1"
query.get("b"); // "2" 
query.getAll("a"); // ["1"] 

(数组 | 字符串)(必须)查询字符串、对象或者数组参数,用来绑定默认值。

1、传递参数为正值情况:与slice()方法行为相同的

兼容性:

兼容性较差

建议使用polyfill:

来源:

参数

slice()

URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。

wp_parse_args( $args, $defaults );

定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置。

常用方法:

常见的 query_posts()、wp_list_comments() 和 get_terms() 函数都使用了 wp_parse_args() 函数来帮它给数组参数添加默认值。

定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符),如果没有传递第二个参数,则将字符串的长度作为结束位置。

1、构造查询字符串

const query = new URLSearchParams();
query.append("a", 1);
query.append("b", 2);
const queryString = query.toString(); // "a=1&b=2"
const url = `https://www.abc.com?${query}`; // 将自动调用query的toString()方法

wp_parse_args() 函数是 WordPress 核心经常用到的函数,它的用途很多,但最主要用来给一个数组参数(args)绑定默认值。

substring()方法会将较小的数作为开始位置,将较大的数作为结束位置。如上面的例子substring(3,0) 与substring(0,3)是一样效果的。

$args

var str ="helloWorld";
alert(str.slice(5,3)); // "" 

wp_parse_args函数源代码详解 wp_parse_args 函数的源代码比较简单,
依附于PHP 内置函数get_object_vars、array_merge与WordPress的wp_parse_str函数来实现,
以下是该函数的源代码:

substr()方法传递负值的情况下会存在问题,会返回原始的字符串。IE9修复了此问题。

/**
 * Merge user defined arguments into defaults array.
 *
 * This function is used throughout WordPress to allow for both string or array
 * to be merged into another array.
 *
 * @since 2.2.0
 *
 *第一个参数可以是 字符串、数组或对象(obj)
 * @param string|array $args Value to merge with $defaults
 *第二个参数为默认的预设值数组,必须是数组
 * @param array $defaults Array that serves as the defaults.
 *返回值将是一个数组
 * @return array Merged user defined values with defaults.
 */
function wp_parse_args( $args, $defaults = '' ) {
 if ( is_object( $args ) )
 //将接收的对象(obj)转换为数组
 $r = get_object_vars( $args );
 elseif ( is_array( $args ) )
 //如果是数组则不转换
 $r =& $args;
 else
 //将接收的字符串转换为数组
 wp_parse_str( $args, $r );
 if ( is_array( $defaults ) )
 return array_merge( $defaults, $r );
 return $r;
}

 注意:IE对substr接收负值的处理有错,它会返回原始字符串。

查询字符串:

var str ="helloWorld";
// 一个参数,则将字符串长度作为结束位置
alert(str.substring(3)); // "loWorld"
// 两个参数,7位置上的字符为"r",但不包括结束位置的字符
alert(str.substring(3,7)); // "loWo" 

例子

substring()

您可能感兴趣的文章:

  • WordPress中用于获取文章信息以及分类链接的函数用法
  • 几个优化WordPress中JavaScript加载体验的插件介绍
  • 快速掌握WordPress中加载JavaScript脚本的方法
  • WordPress中用于获取文章作者与分类信息的方法整理

下面给大家介绍slice,substr和substring的区别

(数组)(可选)数组参数的默认参数。

接着,当接收的参数是负数时,slice会将它字符串的长度与对应的负数相加,结果作为参数;substr则仅仅是将第一个参数与字符串长度相加后的结果作为第一个参数;substring则干脆将负参数都直接转换为0。测试代码如下:

array( 'type' => 'post', 'posts_per_page' => 5, 'cat' => '1' )

substring()方法会把所有负值参数转换为0。来看下例子:

默认值:None

var str ="helloWorld";
// 两个参数,-4会转换为0,相当于substring(3,0) -->即为 substring(0,3)
alert(str.substring(3,-4)); // "hel" 
type=post&posts_per_page=5&cat=1
 var test = 'hello world';
  alert(test.slice(,));    //o w
  alert(test.substring(,));   //o w
  alert(test.substr(,));   //o world 

用法

您可能感兴趣的文章:

  • JavaScript中解决多浏览器兼容性23个问题的快速解决方法
  • 常用原生JS兼容性写法汇总
  • JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
  • JS实现兼容性较好的随屏滚动效果
  • JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
  • javascript中setAttribute()函数使用方法及兼容性
  • css与javascript跨浏览器兼容性总结
  • js日期对象兼容性的处理方法
  • Javascript 多浏览器兼容性问题及解决方案
  • JavaScript的兼容性与调试技巧

因为 wp_parse_args() 函数返回的一定是一个数组,所以他会把传入查询字符串和对象(object)自动转换成数组,给了使用者更加方便的条件,也增加了兼容性。

substr()方法会将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0。

$defaults

在传递正值参数情况下,slice() 和 substring () 行为是一致的,substr()方法在第二个参数上会容易混淆

function explain_parse_args( $args = array() ){

  //$args 的默认值
  $defaults = array(
    'before' => '<div class="box">',
    'after' => '</div>',
    'echo' => true,
    'text' => 'wp_parse_args() 函数演示'
  );

  //绑定默认值
  $r = wp_parse_args( $args, $defaults );

  $output = $r['before'] . $r['text'] . $r['after'];
  if( !$r['echo'] ) return $output;
  echo $output;
}

//没有参数
explain_parse_args();//打印:<div class="box">wp_parse_args() 函数演示</div>

//字符串参数
$output = explain_parse_args( 'text=字符串参数&before=<div class="box-2">&echo=0' );
echo $output;//打印:<div class="box-2">字符串参数</div>

//数组参数
explain_parse_args( array( 'text' => '数组参数', 'before' => '<div class="box-3">' ) );//打印:<div class="box-3">数组参数</div>
还有另一种不使用第二个 $defaults 参数的用法,就是帮你把一个查询字符串、对象或者数组的变量直接转换成通用的数组,避免判断类型。

//字符串
$array = wp_parse_args( 'text=测试另一种用法&type=字符串' );
var_dump( $array );
/*
  array(2) {
    ["text"]=>
      string(21) "测试另一种用法"
    ["type"]=>
      string(9) "字符串"
  }
*/

//对象(object)
class args_obj{

  public $text = '测试另一种用法';

  public $type = '对象(object)';

  function func(){
    //转换成数组的时候对象里边的函数会被忽略
  }

}
$obj = new args_obj;
var_dump( $obj );
/*
object(args_obj)#2175 (2) {
  ["text"]=>
    string(21) "测试另一种用法"
  ["type"]=>
    string(18) "对象(object)"
}
*/

定义:接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数跟之前的方法有些区别,表示返回的字符个数。如果没有传递第二个参数,则将字符串的长度作为结束位置。来看例子:

其中get_object_vars函数是用来返回由对象属性组成的关联数组。
array_merge函数用是将两个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

var test = 'hello world';  
alert(test.slice(-));   //rld  
alert(test.substring(-));  //hello world  
alert(test.substr(-));  //rld  
alert(test.slice(,-));  //lo w  
alert(test.substring(,-)); //hel  
alert(test.substr(,-));  //空字符串 

数组:

1、传递参数为正值情况:

var str ="helloWorld";
// 一个参数,则将字符串长度作为结束位置
alert(str.slice(3)); // "loWorld"
// 两个参数,7位置上的字符为"r",但不包括结束位置的字符
alert(str.slice(3,7)); // "loWo" 

2、传递参数为负值的情况:

3、IE兼容性

在截取字符串时常常会用到substr()、substring()、slice()方法,有时混淆之间的用法,故总结下。

4、IE兼容性

substr()

alert(test.substring(7,4));   //o w 

slice()方法传入的第二个参数比第一个参数小的话,则返回空字符串。

总结

2、传递参数为负值的情况:

4、IE兼容性

在IE8浏览器测试下,没啥问题,行为与现代浏览器一致。

3、第二个参数比第一个参数值小的情况:

首先,他们都接收两个参数,slice和substring接收的是起始位置和结束位置(不包括结束位置),而substr接收的则是起始位置和所要返回的字符串长度。直接看下面例子:

这里有个需要注意的地方就是:substring是以两个参数中较小一个作为起始位置,较大的参数作为结束位置。

在传递负值参数情况下,slice() 方法是通过字符串长度相加,符合一般思维,substring()第二个参数转换为0会容易出问题,起始位置会容易变更,substr() 方法负值情况下会出现IE兼容性问题。

阅读目录
•slice()
•substring()
•substr()
•总结 

如:

slice()方法会将传入的负值与字符串长度相加。
 var str ="helloWorld";
// 一个参数,与字符串长度相加即为slice(7)
alert(str.slice(-3)); // "rld"
// 两个参数,与字符串长度相加即为slice(3,6)
alert(str.slice(3,-4)); // "loW" 

2、传递参数为负值的情况:

1、传递参数为正值情况:

综上,小弟一般推荐使用slice()方法。

在IE8浏览器测试下,没啥问题,行为与现代浏览器一致。

var str ="helloWorld";
// 将第一个负的参数加上字符串的长度--->
//即为:substr(7,5) ,从位置7开始向后截取5个字符
alert(str.substr(-3,5)); // "rld"
// 将第二个参数转换为0
// 即为:substr(3,0),即从位置3截取0个字符串,则返回空
alert(str.substr(3,-2)); // "" 

本文由时时app平台注册网站发布于web前端,转载请注明出处:详明WordPress中用来合成数组的wp_parse_args()函数

关键词: