php数组高级小结(一)
<?php
/**
* php5.4新增数组定义
*/
$items1 = [ 'a','b','c' ];
$items2=[ 'name'=>'andy','age'=>52 ]; print_r($items1);
print_r($items2);
<?php /**
* 功能描述:把以下数组中 address相同的值合并,count的值相加。这个问题经常会遇到
* $items = array(
* array("address"=>"美国", "count"=>123),
* array("address"=>"美国", "count"=>34),
* array("address"=>"中国", "count"=>2),
* array("address"=>"中国", "count"=>20),
* array("address"=>"法国", "count"=>345)
* );
* 处理后变为:
* $items = array(
* array("address"=>"美国", "count"=>157),
* array("address"=>"中国", "count"=>22),
* array("address"=>"法国", "count"=>345)
* );
*/ $items = array(
array("address"=>"美国", "count"=>123),
array("address"=>"美国", "count"=>34),
array("address"=>"中国", "count"=>2),
array("address"=>"中国", "count"=>20),
array("address"=>"法国", "count"=>345)
); $map = array();
foreach($items as $item){
$key = $item['address'];
/**
* isset和array_key_exists的区别
*/
//if(isset($map[$key]])){
if(array_key_exists($key,$map)){
$map[$key]['count'] += $item['count'];
}else{
$map[$key] = $item;
}
} print_r(array_values($map));
<?php /**
* array_multisort — 对多个数组或多维数组进行排序
*/ /** 一 ############################################################################
* 第一个数组是要排序的主要数组。
* 第二个数组中的项目顺序完全和第一个数组中相应的项目顺序一致。
* 数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序
*/
$ar1 = array("a","b","d", "c");
$ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2); /** 二 ############################################################################
* 本例中 data 数组中的每个单元表示一个表中的一行。
* 这是典型的数据库记录的数据集合。
* 例子中的数据如下:
* volume | edition
* -------+--------
* 67 | 2
* 86 | 1
* 85 | 6
* 98 | 2
* 86 | 6
* 67 | 7 * 数据全都存放在名为 data 的数组中。
* 这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()。
*/ $data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7); /**
* 本例中将把 volume 降序排列,把 edition 升序排列。
* 现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组
* ,因此用以下代码来取得列,然后排序。
*/ // 取得列的列表
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
} // 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); print_r($data); /**
* 数据集合现在排好序了,结果如下:
* volume | edition
* -------+--------
* 98 | 2
* 86 | 1
* 86 | 6
* 85 | 6
* 67 | 2
* 67 | 7
*/
<?php
/**
* usort — 使用用户自定义的比较函数对数组中的值进行排序
* 这个方法再某些方面真的很实用,针对这个方法会单独写个文章
*/ /**
* 二维数组排序,很简单的一个方法
* 下例二维数组按id排序,array_multisort也可实现
*/
$items=array(
array('id'=>12,'name'=>'张三' ,'age'=>18),
array('id'=>8,'name'=>'李四' ,'age'=>30),
array('id'=>19,'name'=>'王五' ,'age'=>10),
array('id'=>4,'name'=>'赵六' ,'age'=>39),
array('id'=>86,'name'=>'孙七' ,'age'=>6),
); usort($items,function($itema,$itemb){
return ($itema['id'] -$itemb['id']);
}); print_r($items);
<?php
/**
* 从m个数中选出n个数来 ( 0 < n <= m), 要求n个数之间不能有重复,其和等于一个定值k, 求一段程序,罗列所有的可能。
* @param int $need 定值
* @param array $arr 选取的数组集合
* @return array 符合的子集合
*/
function sel_set($need, $arr) {
//子集数2的数组元素数次方
$arr_count = count($arr);
$set_count = pow(2, $arr_count); /**
* 此方法原理: 对于集合{a, b, c}
* 针对其中的元素都有2种状态1在子集中0不在
* 0=>0 0 0 空集不需要考虑
* 1=>0 0 1 => c
* 2=>0 1 0 => b
* 3=>0 1 1 => b c
* 4=>1 0 0 => a
* 5=>1 0 1 => a c
* 6=>1 1 0 => a b
* 7=>1 1 1 => a b c
* 也就是将每个子集对应的编号转化为二进制 再去数组取对应元素
*/ //set_arr用来存放符合需求的子集
$set_arr = array(); //set_count个子集,所以循环set_count次
for( $i = 1; $i < $set_count; $i++ ) {
//tmp用来存放每次子集
$tmp = array(); //将子集对应编号转化二进制
$dec = decbin($i); //数组集合有arr_count个元素,所以将二进制左补0为对应位,以便取数组元素
$dec = str_pad($dec, $arr_count, 0, STR_PAD_LEFT); //对该二进制数循环 判断是否为1
for( $j = 0; $j < $arr_count; $j++ ) { //如果当前位为1, 则将数组对应元素放入子集数组,字符串($dec)可当数组操作
if( 1 == $dec[$j] ) {
array_push($tmp, $arr[$j]);
}
}
//判断当前子集之和是否等于设定的定值,符合则存入set_arr
if( $need == array_sum($tmp) ) {
array_push($set_arr, json_encode($tmp));
}
} //返回符合要求的集合
return $set_arr;
}
//要进行选取的数组,及定值
$need = 18;
$arr = array(11, 18, 12, 1, -2, 20, 8, 10, 7, 6); print_r( sel_set($need, $arr) );
php数组高级小结(一)的更多相关文章
- shell 之awk 关联数组高级应用
最近由于数据迁移过,有些用户信息需要再次确认下,也许数据量比较大,但是需要最终确认的比如说是用户ID和其对应的用户积分数,这样就会导致出现文本a(老的数据),文本b(新的数据).比如 这是文本a.tx ...
- php常用数组函数小结
count函数 作用:计算数组中元素的个数或对象的属性个数 返回值: 数组或者对象, 返回数组的单元个数或者对象的属性个数 Null,返回0 非数组,也非NULL,通通返回1 <?php $ar ...
- java 13-1 数组高级二分查找
查找: 1.基本查找:数组元素无序(从头找到尾) 2.二分查找(折半查找):数组元素有序 pS:数组的元素必须有顺序,从小到大或者从大到小.以下的分析是从小到大的数组 二分查找分析: A:先对数组进行 ...
- php数组使用小结
在PHP中,数组分为两类:索引数组和关联数组.二者可以单独使用,也可以混合使用. 1.一维数组 一维数组的定义也很简单,常用的有如下两种方式: 1.1 直接赋值 1: <?php 3: $dwq ...
- Java数组练习题小结
//2015/07/07 //Java数组小小练习题 /* 3. 写一个函数,计算一个整数数组的平均值 4. 自定义一个整数数组a,读入一个整数n,如果n 在数组中存在,则输出n 的下标:如果不存在, ...
- 13-02 Java 数组高级算法,Arrays类
冒泡排序 冒泡排序原理 冒泡排序代码: package cn.itcast_01; /* * 数组排序之冒泡排序: * 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 */ pub ...
- perl数组高级
1 去除一个数组中的重复元素: 使用grep函数代码片段: 代码: my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 ); my %count; ...
- 面向对象(基础oop)之结构与数组高级
大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...
- javascript jquery数组操作小结
----------------------------------------------------------定义数组-------------------------------------- ...
随机推荐
- servlet基本原理(手动创建动态资源+工具开发动态资源)
一.手动开发动态资源 1 静态资源和动态资源的区别 静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源. 动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变. <scr ...
- php中opendir函数用法实例
这篇文章主要介绍了php中opendir函数用法,以实例形式详细讲述了opendir函数打开目录的用法及相关的注意事项,具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例分析了php中opendi ...
- Java经典实例:把字符串解析为日期时间
Java版本:1.8开始 import java.time.LocalDate; import java.time.LocalDateTime; /** * Created by Frank */ p ...
- 剖析信用卡 DCC 交易
摘要: 所谓DCC交易(Dynamic Currency Conversion,直译:动态货币转换 ),或者叫CPC交易(Cardholder Preferred Currency,直译:持卡人选定货 ...
- 手机网游开发指南 - 需要多NB的技术
Agent`K 似乎在三天打鱼N天晒网.只能呵呵了,懒散的家伙. 移动互联网越来越火,其中的网络游戏更是火,熊熊大火. 作为攻城师的你,作为小投资者的你,作为满脑子创意想要实现的你,肯定在四处打听:手 ...
- PHP5 各版本维护时间
版本维护: 5.2:维护至:2011-01-06.支持:xp(2003)以上.最终版本:5.2.17. 5.3:维护至:2014-08-14.支持:xp(2003)以上.最终版本:5.3.29 5.4 ...
- mongodb 数据库操作--备份 还原 导出 导入
mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport 一,mongodump备份数据 ...
- SharePoint 2013 配置HTTPS(SSL)
1.打开服务器上的IIS,找到服务器证书,如下图: 2.进入服务器证书,点击右侧操作“创建自签名证书”,如下图: 3.为证书指定一个好记名称,存储选择个人,如下图: 4.点击确定以后,服务器证书页面, ...
- Android自定义控件1--自定义控件介绍
Android控件基本介绍 Android本身提供了很多控件比如我们常用的有文本控件TextView和EditText:按钮控件Button和ImageButton状态开关按钮ToggleButton ...
- linux 系统权限 数字含义
摘抄: sudo chmod XXX dir_name XXX是你要设置的权限代号,第一位代表Owner,第二位代表Group,第三位代表Others XXX中0代表什么都不可以,1代表可执行,2代表 ...