【问题标题】:How could I optimise this PHP function?我该如何优化这个 PHP 函数?
【发布时间】:2023-03-03 04:03:01
【问题描述】:

这里我有一个函数,可以从嵌套数组中删除一些键。 我怎样才能优化它以看起来更漂亮,也许更有效?

$data 为数组类型,包含以下内容:

$data = [
  '0' => [
     'key1' => 'value1',
     'key2' => 'value2',
     'key3' => 'value3'
  ],
  '1' => [
     'key1' => 'value4',
     'key2' => 'value5',
     'key3' => 'value6'
  ],
];

$column(s) 是数组类型,包含我想从这个数组数组中删除的键

$columns = ['key1', 'key2'];

而用PHP写的部分函数是:

***
        $newData = [];

        foreach ($data as $row) {
           $newRow = array_diff_key($row,array_flip($columns));
           array_push($newData, $newRow);
        }

        return $newData;
***

预期结果:

$data = [
  '0' => [
     'key1' => 'value1'
  ],
  '1' => [
     'key1' => 'value4'
  ],
];

该功能运行良好,但看起来很糟糕:D

【问题讨论】:

  • 优化问题在codereview.stackexchange.com 上可能会更好,但请务必先通过tour 并通过help center 解决
  • 在同一个数组中不能有两个 0 键。数组键必须是唯一的。
  • 你只能在循环外翻转$columns数组一次
  • 您可以将array_push($newData, $newRow); 替换为$newData[] = $newRow;,然后调用函数的开销将被消除
  • 来看看你为什么要翻转你硬编码的数组?

标签: php function optimization multidimensional-array formatting


【解决方案1】:

希望能解决你的问题

function delKey ($data, $columns){
    $result = array();
    for ($i = 0; $i<count($data); $i++){
        $a = $data["$i"];
        foreach ($columns as $key){
            if (isset($a[$key])){
                unset($a[$key]);
            }
        }
        $result["$i"] = $a;
    }
    return $result;
}

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多