美文网首页
数组中的键根据另一个数组的键排序

数组中的键根据另一个数组的键排序

作者: 扁扁的汤圆 | 来源:发表于2019-07-09 10:36 被阅读0次
$sort = ['advertiser_id','advertiser_name','raw','valid_clicks_count','invalid_clicks_count','conversions_count','revenue'];

$arr = Array(
    [0] => Array
        (
            [advertiser_id] => 1
            [valid_clicks_count] => 4
            [conversions_count] => 2
            [revenue] => 0.40
            [invalid_clicks_count] => 3
            [raw] => 7
            [advertiser_name] => Ad1
        )
)

以上二维数组中的一维数组的键根据$sort的值进行排序
现有两种方式:

方式一:

创建一个新的数组,循环赋值,再注销掉原来的数组

$newArr = [];
foreach ($arr as $key => $val){
                    $newArr[$key]['advertiser_id'] = $val['advertiser_id'];
                    $newArr[$key]['advertiser_name'] = $val['advertiser_name'];
                    $newArr[$key]['raw'] = $val['raw'];
                    $newArr[$key]['valid_clicks_count'] = $val['valid_clicks_count'];
                    $newArr[$key]['invalid_clicks_count'] = $val['invalid_clicks_count'];
                    $newArr[$key]['conversions_count'] = $val['conversions_count'];
                    $newArr[$key]['revenue'] = $val['revenue'];
                }
                unset($exportData);

效果符合期望:

Array
(
    [0] => Array
        (
            [advertiser_id] => 1
            [advertiser_name] => Ad1
            [raw] => 7
            [valid_clicks_count] => 4
            [invalid_clicks_count] => 3
            [conversions_count] => 2
            [revenue] => 0.40
        )
)

测试运行时间和空间的数据


开始内存:377704Array
(
    [0] => Array
        (
            [advertiser_id] => 1
            [advertiser_name] => Ad1
            [raw] => 7
            [valid_clicks_count] => 4
            [invalid_clicks_count] => 3
            [conversions_count] => 2
            [revenue] => 0.40
        )

)
<br />[页面执行时间:3.9815902709961E-5 ]秒<br />运行后内存:378800回到正常内存:378800

方式二:适用php的内置函数 array_flip,array_replace

$sort = ['advertiser_id','advertiser_name','raw','valid_clicks_count','invalid_clicks_count','conversions_count','revenue'];
foreach ($data as &$val){
    $val = (array_replace(array_flip($sort), $val));
}

效果符合期望值

开始内存:376088Array
(
    [0] => Array
        (
            [advertiser_id] => 1
            [advertiser_name] => Ad1
            [raw] => 7
            [valid_clicks_count] => 4
            [invalid_clicks_count] => 3
            [conversions_count] => 2
            [revenue] => 0.40
        )

)
<br />[页面执行时间:2.1934509277344E-5 ]秒<br />运行后内存:376728回到正常内存:376728
经过多次测试,两者运行平均时间相差不大,可忽略,运行内存消耗方式一大于方式二,推荐用方式二来处理。
PS:测试脚本
<?php
echo '开始内存:'.memory_get_usage(), '';

$stime=microtime(true); //获取程序开始执行的时间

$data = '[{"advertiser_id":1,"valid_clicks_count":4,"conversions_count":2,"revenue":"0.40","invalid_clicks_count":3,"raw":7,"advertiser_name":"Ad1"}]';
$data = json_decode($data, true);
//方式一:
$sortExportData = [];
foreach ($data as $key => $val){
    $sortExportData[$key]['advertiser_id'] = $val['advertiser_id'];
    $sortExportData[$key]['advertiser_name'] = $val['advertiser_name'];
    $sortExportData[$key]['raw'] = $val['raw'];
    $sortExportData[$key]['valid_clicks_count'] = $val['valid_clicks_count'];
    $sortExportData[$key]['invalid_clicks_count'] = $val['invalid_clicks_count'];
    $sortExportData[$key]['conversions_count'] = $val['conversions_count'];
    $sortExportData[$key]['revenue'] = $val['revenue'];
}
print_r($sortExportData);
unset($data);

//方式二:
$sort = ['advertiser_id','advertiser_name','raw','valid_clicks_count','invalid_clicks_count','conversions_count','revenue'];
foreach ($data as &$val){
    $val = (array_replace(array_flip($sort), $val));
}
print_R($data);

$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime;   //计算差值
echo "<br />[页面执行时间:{$total} ]秒".'<br />';

echo '运行后内存:'.memory_get_usage(), '';
unset($tmp);
echo '回到正常内存:'.memory_get_usage();

相关文章

  • 数组中的键根据另一个数组的键排序

    以上二维数组中的一维数组的键根据$sort的值进行排序现有两种方式: 方式一: 创建一个新的数组,循环赋值,再注销...

  • Redis - 排序

    Redis - 排序 SORT命令通过将被排序键包含的元素载入到数组里,然后对数组进行排序来完成对键进行排序的工作...

  • 常用的小方法(持续添加中...)

    1、数组套对象排序(根据对象内的某个键进行排序) 2、数组套对象去重(根据某个键值进行去重) 3、获取当前之前某天...

  • 排序二维数组

    根据二维数组里某个键排序转载 1.array_column() 返回输入数组中某个单一列的值。 2.array_m...

  • PHP数组常用方法

    1. 数组的遍历 2. 数组排序 sort 与 rsort 按数组的值排序 asort与arsort 按数组的键排...

  • PHP基础2

    PHP数组 索引数组,数组的键是整数的数组,并且键的整数顺序是从0开始 结果为: 关联数组,数组的键是字符串的数组...

  • 根据二维数组中的一个键组合成新的数组

    /** * 二维数组转三维数组(指定键为三维数组的键名) * @param [type] $arr [要排序的...

  • PHP 数组(Array) - 排序算法

    PHP手册 - 对数组进行排序 数组查找算法查找算法,就是从一个数组中,找一个“目标”(可以是值,也可以是键)的算...

  • JS 根据数组中的某个属性值排序

    JS 根据数组中的某个属性值排序 /* 根据数组中的某个属性值排序 */function compareByKey...

  • 【perl】perl哈希(四)——哈希的使用

    获取哈希的长度 长度指的是hash中键的个数,第一级键的个数 在数组中返回数组元素个数: 对于哈希: 哈希的排序 ...

网友评论

      本文标题:数组中的键根据另一个数组的键排序

      本文链接:https://www.haomeiwen.com/subject/emvtkctx.html