<?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. [moka同学笔记]window下.htacess文件 与linux下.htacess文件

    windows下 # Turn on URL rewritingRewriteEngine On# Installation directoryRewriteBase /# Protect hidde ...

  2. 【Qt】2.3 使用Qt设计师来创建对话框

    安装完Qt OpenSource之后,在开始菜单目录下会有这几个东西. 其中[Designer]是用来设计窗口界面的程序.所以现在可以使用它来设计一个对话框.在[Qt Creator]中,[设计]这一 ...

  3. 为vs2012添加背景和皮肤

    每天对着电脑用VS进行编码开发,难免有点单调.我们可以试着像设置电脑桌面壁纸一样设置VS皮肤. 先看下效果 1.打开vs2012,工具——扩展和更新 2.选择联机,搜索并分别安装如下两个插件 3.安装 ...

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

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

  5. 简单的Writer和Reader

    Writer用于写出去到文件中,Reader用于将外面的文件读进来控制台 Writer和Reader有许多子类,但是子类大多都是直接运用父类Writer和Reader的方法,而且Writer和Read ...

  6. js动态计算移动端rem

    在做移动端web app的时候,众所周知,移动设备分辨率五花八门,虽然我们可以通过CSS3的media query来实现适配,例如下面这样: html { font-size : 20px; } @m ...

  7. sql server 2014预览版发布

    MSDN发布sql server2014预览版,如下图: SQL Server 2014新特性: 微软SQL Server部门主管Eron Kelly介绍,通过将交易处理放到内存中进行,新的SQL S ...

  8. Atitit.在线充值功能的设计

    Atitit.在线充值功能的设计 1. 流程1 2. Js sdk api   增加订单1 3. Java api 返回servlet处理1 3.1. 返回网址的本地host测试2 1. 流程 本地增 ...

  9. iOS中sqlite版本号

    https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) https://github.com/y ...

  10. Android JNI 和 NDK

    1.Android NDK 一.NDK产生的背景 Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第 ...