<?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数组高级小结(一)的更多相关文章

  1. shell 之awk 关联数组高级应用

    最近由于数据迁移过,有些用户信息需要再次确认下,也许数据量比较大,但是需要最终确认的比如说是用户ID和其对应的用户积分数,这样就会导致出现文本a(老的数据),文本b(新的数据).比如 这是文本a.tx ...

  2. php常用数组函数小结

    count函数 作用:计算数组中元素的个数或对象的属性个数 返回值: 数组或者对象, 返回数组的单元个数或者对象的属性个数 Null,返回0 非数组,也非NULL,通通返回1 <?php $ar ...

  3. java 13-1 数组高级二分查找

    查找: 1.基本查找:数组元素无序(从头找到尾) 2.二分查找(折半查找):数组元素有序 pS:数组的元素必须有顺序,从小到大或者从大到小.以下的分析是从小到大的数组 二分查找分析: A:先对数组进行 ...

  4. php数组使用小结

    在PHP中,数组分为两类:索引数组和关联数组.二者可以单独使用,也可以混合使用. 1.一维数组 一维数组的定义也很简单,常用的有如下两种方式: 1.1 直接赋值 1: <?php 3: $dwq ...

  5. Java数组练习题小结

    //2015/07/07 //Java数组小小练习题 /* 3. 写一个函数,计算一个整数数组的平均值 4. 自定义一个整数数组a,读入一个整数n,如果n 在数组中存在,则输出n 的下标:如果不存在, ...

  6. 13-02 Java 数组高级算法,Arrays类

    冒泡排序 冒泡排序原理 冒泡排序代码: package cn.itcast_01; /* * 数组排序之冒泡排序: * 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 */ pub ...

  7. perl数组高级

    1 去除一个数组中的重复元素: 使用grep函数代码片段: 代码: my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 ); my %count; ...

  8. 面向对象(基础oop)之结构与数组高级

    大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...

  9. javascript jquery数组操作小结

    ----------------------------------------------------------定义数组-------------------------------------- ...

随机推荐

  1. static的用法

    首先,看看变量的存储: int global ; int main() { int stackStore ; int heapStore* = (int *)malloc(sizeof(int)); ...

  2. Git远程和分支管理

    一.远程       Git是分布式版本控制系统,最重要的优点就是远程仓库托管代码.不用自己搭建一个服务器,在github上面注册一个账户就可免费获取远程仓库.      首先需要先在github上面 ...

  3. Java经典实例:使用ChoiceFormat来格式化复数

    import java.text.ChoiceFormat; /** * Created by Frank */ public class FormatPuralsChoice extends For ...

  4. <记录学习>京东页面最后一天HTML以及css遇到的问题

    遇到的问题及新的知识 1.< &gt表示< >号2.rgba(0,0,0,透明度) opacity:0~1:3.<a href="javascript:voi ...

  5. 解决MVC4发布在IIS7后,路径无法访问.apk文件的解决方法

    随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件 ...

  6. Training - An Introduction to Enterprise Integration

    What is EI? Enterprise Integration (EI) is a business computing term for the plans, methods, and too ...

  7. [Cordova] 无法显示Alert视窗

    [Cordova] 无法显示Alert视窗 问题情景 今天开了一个Cordova专案做范例,将预设的index.html页面修改为下列内容.按下执行却发现,这样一个简单的范例无法正常执行.点击页面上的 ...

  8. C# 中几个小“陷阱”

    每天写代码,偶尔就会有让你抓狂的时候:代码改了千百遍,蓦然回首,Bug就在灯火阑珊处……这里就列举一些容易犯错的几个小地方,以后遇到了其他的,再慢慢添加.   1. 获取程序当前运行路径   情景复现 ...

  9. 图解.NET Stack和Heap的本质区别

    现在越来越觉得对.NET基本概念的理解和掌握对于提升编程水平的重要性,先从.NET的 Stack(栈)和Heap(堆)说起,计算机的内存可以分为代码块内存,stack内存和heap内存.代码块内存是在 ...

  10. ABAP中RETURN与EXIT语句的区别

    EXIT:1) EXIT如果出现在循环中,退出的是整个循环操作,.程序会从循环结束处开始继续执行,其作用相当于Java与C++中的break.2)EXIT如果出现在循环之外,退出的是当前执行的程序块( ...