php获取给定时间范围内的日期列表数组。 /** * 获取给定时间范围内的日期列表数组 * @param int $start_unixtime * @param int $end_unixtime * @return array [日期 => 星期几] */ function getDateList($start_unixtime, $end_unixtime) { $date_list = []; while ($start_unixtime <= $end_unixtime) { $date_list[date('Y-m-d', $start_unixtime)] = date('w', $start_unixtime); $start_unix......
php 给数组中的每个元素加上单引号或双引号。例如: $array = [1, 2]; 现在需要将该数组变为: $arr = ['1', '2']; 操作方法: $new_array = array_map(function ($value) { return '\'' . $value . '\''; }, $array); 关于 array_map 相关知识可参考: PHP数组函数array_map()笔记 php数组处理函数array_filter、array_walk、array_map的区别
例如像下面这种由对象组成的数组($vipUserList),在php 7下可以通过 array_column 获取该数组的 parent_uid 的一个一维数组列表,但是在 5.6 中 array_column 却不能作用于对象。 Array ( [32648321] => App\Models\VipUser Object ( [table:protected] => vip_user [mc_prefix:protected] => VipUser:: [fillable:protected] => Array ......
php二维数组按其中某一列排序。 <?php $data = [ ['name' => '张三', 'age' => '20', 'score' => '78'], ['name' => '李四', 'age' => '21', 'score' => '78'], ['name' => '王五', 'age' => '20', 'score' => '60'], ['name' => '大强子', 'age' => '26', 'score' => '100'] ]; // 将数据根据 score 降序排列 array_multisort(array_column($data, 'score'), SORT_DESC, $data); echo '<pre>';print_r($da......
JS中字符串与数组的转换,类似PHP的explode implode 。 js 数组转字符串 join var a = new Array(1, 2, 3, 4, 5, 6); var b = a.join(","); alert(b); js 字符串转数组 split var a = "1,2,3,4,5,6"; var b = new Array(); b = a.split(","); alert(typeof b); alert(b);
Laravel Eloquent使用groupBy()返回每个组的计数。示例:查询每个用户产生的日志数,并返回一个以uid为key的二维数组。 $user_log_num_list = UserLog::select('uid', DB::raw('COUNT(id) AS num')) ->whereIn('uid', $uid_list) ->groupBy('uid')->get()->keyBy('uid')->toArray();
PHP获取以字母递增为键值的数组。 /** * 获取以字母递增为键值的数组 * @param bool $capitalization * @param int $length * @return array */ function getCharList($capitalization = true, $length = 26) { $key = $capitalization ? 65/*大写字母*/ : 97/*小写字母*/; $list = array(); for ($i = 1; $i <= $length; $i++) { $list[] = chr($key); $key++; } return $list; } ......
该功能更好的处理方式请参考:php二维数组按其中某一列排序 php二维数组按照多个key进行排序。 /** * @param $array * @param $cols * @return array */ function array_msort($array, $cols) { $colarr = array(); foreach ($cols as $col => $order) { $colarr[$col] = array(); foreach ($array as $k => $row) { $colarr[$col]['_' . $k] = strtolower($row[$col]); } ......
php获取某个时间点之前的前 n 天,将结果组成数组。 /** * 获取某个时间点之前的前 n 天 * @param int $recent * @param int $time * @return array */ function getRecentDays($recent = 6, $time = 0) { !$time && $time = time(); $list = []; for ($i = $recent; $i > 0; --$i) { $t = strtotime("-$i day", $time); $list[] = date('Y-m-d', $t); } return $list; } print_r......
需求:二维数组,先根据字段A排序 如果A一样通过字段B排序。(更多字段排序原理一样) 该功能更好的处理方式请参考:php二维数组按其中某一列排序 使用php原生的array_multisort()函数,执行速度会快些且降低自定义函数的依赖,关于array_multisort详细使用 参考: http://php.net/manual/zh/function.array-multisort.php 思路: 1. 先搜集要排序的字段的值分别组合成一个新的数组 2. 再用 array_multisort 根据要排序的字段......
php中怎么去除二维数组的某个或某几个字段?最直接的使用 foreach 当然可以搞定,这里介绍一个比较特殊的方法,算是对php数组的用法再加深一下吧。 这里主要使用到了 array_walk 和 array_diff 两个函数。 示例: $list = [ 0 => [ 'id' => 1001, 'name' => '张三', 'sex' => '男' ], 1 => [ 'id' => 2091, 'name' => '李四', 'sex' => '女' ] ]; 假设需要......
使用php将一个二维数组处理成以其中一列为key,另一列为value的一维数组,有很多种办法,特记录一下使用php内置函数完成该功能的方法,算是加深一下对php数组处理函数的认识。 主要使用到了 array_column array_combine 两个函数。 示例: $list = [ 0 => [ 'id' => 1001, 'name' => '张三' ], 1 => [ 'id' => 2091, 'name' => '李四' ] ]; 现在需要将以上数据处理成为下列......
php技术中数组递归处理函数array_map,array_walk,array_filter的区别整理。 三个方法的具体使用形式列举如下: array_map(function($value){ // }, $array); array_walk($array, function($value, $key){ // }); array_filter($array, function($value){ // }); 相同点:都是利用回调函数对数组中每个元素进行操作。 不同点: 返回值 回调函数的参数 是否改变数组的值 array_map 返回的是新数组,原数组不变......
php中计算二维数组中某一个元素之和,记录两个简单的方法。 $user = [ ['name' => '语文', 'score' => 105], ['name' => '数学', 'score' => 116], ['name' => '英语', 'score' => 96], ['name' => '理综', 'score' => 236] ]; 现在需要记录 $user 的 score 字段的和值。 (1) echo array_sum(array_map(function ($value) { return $value['score']; }, $user)); (2) echo array_sum(array_col......
该功能更好的处理方式请参考:php二维数组按其中某一列排序 php二维数组按某个字段排序。 如需要将以下user_list变量按照第二维的字段age排序,则可以: $user_list = [ ['name' => '张三', 'age' => 28], ['name' => '李四', 'age' => 21], ['name' => '王五', 'age' => 20], ['name' => '赵六', 'age' => 21] ]; 按升序排列: array_multisort(array_column($user_list, 'age'), SORT_ASC, $user_list); ......
给接口方返回数据的时候,经常被要求只返回需要的字段,于是自己写了两个方法分别用于过滤获取结果集中的不需要的字段,使用的过程中需要先定义一个过滤的key数组,然后调用对应的方法处理即可。 过滤单个结果集: function filterResult(array &$result, array &$filter_key) { if (!$result) { return false; } $result = array_intersect_key($result, $filter_key); foreach ($filter_key as $ke......
现在的工作基本是开发接口,接口使用方对数据的要求基本都是无意义key的数组集合,对于一维数组,直接使用 array_values 处理一下即可,但是对于多维数组,php就不提供内置的处理方法了,这里自己写了一个利用php对多维数组进行 array_values 的方法,代码如下: function array_values_recursive(&$array) { $temp = []; foreach ($array as $key => $value) { if (is_numeric($key)) { $temp[] = ......
使用array_count_values函数可以找出数组中相同值出现的次数,array_count_values用法如下: array_count_values — 统计数组中所有的值出现的次数 array array_count_values (array $input) array_count_values() 返回一个数组,该数组用 input 数组中的值作为键名,该值在:input 数组中出现的次数作为值 input:统计这个数组的值 返回值: 返回一个关联数组,用 input 数组中的值作为键名,该值在数组中出现的次数作为值......
我们知道计算一维数组的元素值和,可以用array_sum求取,那么计算二维数组的某个key的值之和如何求取呢?当然可以直接使用foreach,也可用通过 array_map 函数来求取。还可以使用 array_column 来求取。 例如: $arr = [ 0 => [ 'id' => 1, 'num' => 6 ], 1 => [ 'id' => 2, 'num' => 3 ] ]; echo array_sum( array_map( function ($value) { ......
整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数、数组的分段和填充、数组与栈、数组与列队、回调函数、排序、计算、其他的数组函数等。 一、数组操作的基本函数 数组的键名和值 array_values($arr); 获得数组的值 array_keys($arr); 获得数组的键名 array_flip($arr); 数组中的值与键名互换(如果有重复前面的会被后面的覆盖) in_array("apple",$arr); 在数组中检索apple array_search("apple"......
对象和数组的相互转化在开发中也是很常见,一般不是多维的情况下直接(array)和(object)就可搞定了,多维的话,遍历下也就可以了,如下: //数组转对象 function arrayToObject($e){ if( gettype($e)!='array' ) return; foreach($e as $k=>$v){ if( gettype($v)=='array' || getType($v)=='object' ) $e[$k]=(object)arrayToObject($v); } return (object)$e; } //对象转数......
该功能更好的处理方式请参考:php二维数组按其中某一列排序 php二维数组根据指定字段排序的方法总结。 /* 用于根据指定字段排序二维数组,保留原有键值 * $array array 输入二维数组 * $sortField string 要排序的字段名 * $sortBy string 要排序的方式(ASC|DESC) * return array * author php.hhsy.cc */ function array_multisort_my($array,$sortField,$sortBy='ASC'){ $result=array(); foreach($array as $k=......
php获取一位数组里的最大值和最小值的方法。 php获取一位数组里面的最大值: <?php $a=array('1','3','55','99'); $pos=array_search(max($a),$a); echo $a[$pos]; php获取一位数组里面的最小值: <?php $a=array('1','3','55','99'); $pos=array_search(min($a),$a); echo $a[$pos];
使用Yii 的Active Record 来获取查询结果的时候,返回的结果集是一个对象类型的,但有时候为了数据处理的方便希望结果集是数组形式或者JSON格式的。那该怎么办呢? 将yii对象结果转为数组 // 查找满足指定条件的结果中的第一行 $post=Post::model()->find($condition,$params); // 查找具有指定主键值的那一行 $post=Post::model()->findByPk($postID,$condition,$params); // 查找具有指定属性值的行 $post=Po......
在用PHP记录日志,或者是 Ajax 请求出错想要 debug 的时候。我们一般都会将信息写入到一个指定的文件当中。然后根据相应的信息来处理问题。 比如笔者最喜欢在用 Ajax 取不到数据的时候,在PHP脚本里面加上下面一段代码: $fp=fopen('./a.txt','a+b'); fwrite($fp,$content); fclose($fp); 但是,这里有一个问题。那就是 $content 是一个数组怎么办? 你可能会说,我循环输出。那要是多维数组呢? 我只是为了 debug 用得着......
(1)php对象转数组的方法(object 转 array): /** * object 转 array */ function object_to_array($obj){ $_arr=is_object($obj)?get_object_vars($obj):$obj; foreach($_arr as $key=>$val){ $val=(is_array($val))||is_object($val)?object_to_array($val):$val; $arr[$key]=$val; } return $arr; } (2)php Json字符转数组的方法(json 转 array): 如果是个 json 字符串的话,可直接通过 json_......
定义和用法 array_walk() 函数对数组中的每个元素应用回调函数。如果成功则返回 TRUE,否则返回 FALSE。 典型情况下 function 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata ,将被作为第三个参数传递给回调函数。 如果 function 函数需要的参数比给出的多,则每次 array_walk() 调用 function 时都会产生一个 E_WARNING 级的错误。这些警告可以通过在 array_walk() 调用前加上 PHP 的......
定义和用法 array_map() 函数返回用户自定义函数作用后的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。 语法 array_map(function,array1,array2,array3...) 参数 描述 function 必需。用户自定义函数的名称,或者是 null。 array1 必需。规定数......
如果要在某个数组中删除一个元素,可以直接用的unset,但是数组的索引不会重排: <?php $arr = array('a','b','c','d'); unset($arr[1]); print_r($arr); 结果是: Array ( [0] => a [2] => c [3] => d ) 那么怎么才能做到缺少的元素会被填补并且数组会被重新索引呢?答案是array_splice(): <?php $arr = array('a','b','c','d'); array_splice($arr,1,1); print_r($arr); 结果是: Array ( [0] => ......
说来惭愧,以前在去掉数组的空值是都是强写foreach或者while的,利用这两个语法结构来删除数组中的空元素,简单代码如下: <?php foreach($arr as $k=>$v){ if(!$v) unset($arr[$k]); } 事实证明如果数组过大的情况下这样处理的效率并不高。因为foreach是将当前操作的数组进行copy,每操作一下foreach,都是copy了一个变量,页面里面如果有太多的foreach,会是一个很大的消耗。 在网上闲逛的时候,看到人有提示......