php数组怎么应用,php数组的索引格式?
php数组的索引格式数组可分为三种类型:1、索引数组,一般表示数组元素在数组中的位置,它由数字组成,下标从 0 开始,数字索引数组默认索引值就是从数字 0 开始的,不需要特别指定,PHP 会自动为索引数组的键名赋一个整数值,然后从这个值开始自动增量,当然,也可以指定从某个位置开始保存数据。
2、关联数组,其下标(键名)由数值和字符串混合的形式组成;
3、多维数组,包含一个或多个数组的数组。
php数组原理?
PHP数组的底层实现是分散列表,也称为hashTable,分散列表是基于键(Key)直接访问存储位置的数据结构,其key-value之间存在映射功能,key可以根据映射功能直接索引对应的value值,不需要通过关键词进行比较,理想的情况下,分散列表的检索效率非常高,时间复杂性为O(1)。从源代码可以看到zend_array的构造。
php多个数组排序?
'张三', 'baifenbi' => 100 );$data[] = array('mingzi' => '李四', 'baifenbi' => 25);$data[] = array('mingzi' => '郑五', 'baifenbi' => 40);//排序前echo "
";//要求,把 baifenbi 升序排列。 //现在有了包含有行的数组 $data,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。 // 取得列的列表foreach ($data as $key => $row) { $baifenbi[$key] = $row['baifenbi'];}// 根据 baifenbi 升序排列// 把 $data 作为最后一个参数,以通用键排序array_multisort($baifenbi,SORT_ASC, $data);//排序后echo "";?> 希望对你有用。PHP多维数组按值排序?
主要用到的PHP函数 array_multisort()
1.先实现指定多维数组一个字段排序根据二维数组的id值来排序,转换后的数组格式如下:
function arraySortByOneField($data, $field, $sort = SORT_DESC)
{
$field = array_column($data, $field);
array_multisort($field,$sort,$data);
return $data;
}
$data = array(0=>array('id'=>7, 'name'=>'Apple', 'age'=> 18),1=>array('id'=>8, 'name'=>'Bed', 'age'=>17),2=>array('id'=>6, 'name'=>'Cos', 'age'=>16),3=>array('id'=>5, 'name'=>'Cos', 'age'=>14));
$newArray = arraySortByOneField($data, 'id', SORT_DESC);
var_dump($newArray );
2.实现多维数组的指定两个字段排序根据二维数组的多个属性值来排序,转换后的数组格式如下:
function sortArrByManyField()
{
$args = func_get_args();
if(empty($args)){
return null;
}
$arr = array_shift($args);
if(!is_array($arr)){
throw new Exception("第一个参数不为数组");
}
foreach($args as $key => $field){
if(is_string($field)){
$temp = array();
foreach($arr as $index=> $val){
$temp[$index] = $val[$field];
}
$args[$key] = $temp;
}
}
$args[] = &$arr;//引用值
call_user_func_array('array_multisort',$args);
return array_pop($args);
}
$data = array(0=>array('id'=>7, 'name'=>'Apple', 'age'=> 18),1=>array('id'=>8, 'name'=>'Bed', 'age'=>17),2=>array('id'=>6, 'name'=>'Cos', 'age'=>16),3=>array('id'=>5, 'name'=>'Cos', 'age'=>14));
$newArray = arraySortByManyField($data, 'id', SORT_ASC, 'name', SORT_ASC, 'age', SORT_DESC);
var_dump($newArray );
PHP获取数组最后一个值?
引言
我们对于 PHP 的数组操作乐此不疲,为什么?因为 PHP 编程你几乎时时刻刻都在于数组打交道,对于数组的操作熟练程度,很大一部分因素关系着代码的优劣。
今天我们来说说,如何获取数组的最后一个元素,并且不删除它。
不要小看这个需求,没准儿你还做不对呢 :)
学习时间如果你首先想到了 array_pop,那很不幸,这个函数可以获取最后一个元素,却把数组更改了。
array_pop 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL。 此外如果被调用不是一个数则会产生一个 Warning。
这显然不是我们要的结果。
其实实现一个需求的方法是多种多样的,我们尝试使用 10 种不同的办法,来做到这一点。
$x = array_values(array_slice($array, -1))[0]
第一种,使用 array_slice 截取数组 $array 倒数第一个元素。返回的是一个数组。然后使用 array_values 重新编排索引值。因为数组只有一个元素,那么索引值必然是 0。原数组 $array 毫发无损。
$x = array_slice($array, -1)[0];
第二种方法没有考虑关联数组的情况,有可能索引 0 不存在。所以容错性不好。
$x = array_pop((array_slice($array, -1)));
第三种方法,终于用到了 array_pop。不过是在 array_slice 阶段的数组上使用。
$x = array_pop((array_slice($array, -1, 1)));
第四种方法,简直是有魔性了,比第三种办法相比,只是在 array_slice 截断的长度手动指定为 1。
$x = end($array); reset($array);
第五种方法,用到数组指针了。end 返回最后一个元素。然后需要手动恢复指针位置到头部,所以调用了一次 reset 函数。本方法有可能返回关联数组,而不能拿到值。
$x = end((array_values($array)));
第六种方法,严格地为了返回最后一个元素的值,使用 array_values 进行了索引重新编排。
$x = $array[count($array)-1];
第七种方法,直接使用索引了。肯定是假设数组都是默认递增索引的数组,所以 count 获取的长度才有效。该方法容错性差。
$keys = array_keys($array); $x = $array[$keys[count($keys)-1]];
第八种方法,是对第七种的不足的修复。
$x = $array[] = array_pop($array);
第九种方法,我们需要明白,使用连等复制,array_pop 弹出数组的最后一个元素后,同时赋值给 $x。这没问题。赋值给原数组 $array[],这会对关联数组重新排定索引,所以有副作用。
$x = $array[array_key_last($array)];
第十种,这种方法的容错性也极高,因为使用了 array_key_last,有效地考虑了关联数组的情况,而且结果也很取巧。这个方法很棒。但是只有 PHP 7.3 以上的版本才有。
写在最后好了,大家好好消化一下上面10个方法的优劣,取长补短,深度学习吧。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。