How to implode array with key and value without foreach in PHP

后端 未结 11 1406
悲&欢浪女
悲&欢浪女 2020-12-04 07:20

Without foreach, how can I turn an array like this

array(\"item1\"=>\"object1\", \"item2\"=>\"object2\",.......\"item-n\"=>\"objec         


        
11条回答
  •  猫巷女王i
    2020-12-04 08:11

    I spent measurements (100000 iterations), what fastest way to glue an associative array?

    Objective: To obtain a line of 1,000 items, in this format: "key:value,key2:value2"

    We have array (for example):

    $array = [
        'test0' => 344,
        'test1' => 235,
        'test2' => 876,
        ...
    ];
    

    Test number one:

    Use http_build_query and str_replace:

    str_replace('=', ':', http_build_query($array, null, ','));
    

    Average time to implode 1000 elements: 0.00012930955084904

    Test number two:

    Use array_map and implode:

    implode(',', array_map(
            function ($v, $k) {
                return $k.':'.$v;
            },
            $array,
            array_keys($array)
        ));
    

    Average time to implode 1000 elements: 0.0004890081976675

    Test number three:

    Use array_walk and implode:

    array_walk($array,
            function (&$v, $k) {
                $v = $k.':'.$v;
            }
        );
    implode(',', $array);
    

    Average time to implode 1000 elements: 0.0003874126245348

    Test number four:

    Use foreach:

        $str = '';
        foreach($array as $key=>$item) {
            $str .= $key.':'.$item.',';
        }
        rtrim($str, ',');
    

    Average time to implode 1000 elements: 0.00026632803902445

    I can conclude that the best way to glue the array - use http_build_query and str_replace

提交回复
热议问题