Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何减少此函数的代码_Php_Reduce - Fatal编程技术网

Php 如何减少此函数的代码

Php 如何减少此函数的代码,php,reduce,Php,Reduce,输入数组$items: Array ( [0] => Array ( [id] => 2 ) [1] => Array ( [id] => 5 ) ) 打印结果(foo($items)) 函数foo() 如何使用标准PHP函数编写此数组转换,如array\u flip()或其他一些函数。有可能吗?使用内置PHP函数只会带来额外函数调用的不必

输入数组
$items

Array
(
    [0] => Array
        (
            [id] => 2
        )
    [1] => Array
        (
            [id] => 5
        )
)

打印结果(foo($items))


函数
foo()


如何使用标准PHP函数编写此数组转换,如
array\u flip()
或其他一些函数。有可能吗?

使用内置PHP函数只会带来额外函数调用的不必要开销。您所写的已经是从给定输入创建所需输出的有效方法

如果可能的话,我建议您使用自定义函数。

$r=array\u combine(
$r = array_combine( 
  array_map(function($i){ return $i['id']; }, $items), // <-- key
  array_fill(0, count($items), true /* or 1 */)        // <-- value
);

array_-map(function($i){return$i['id'];},$items),//也许您想看看underline.js的php肉汤,特别是
pulk
func:
array_-fill_键(uuu::pulk($items,'id'),true)
@biziclop,thx,但我只想使用标准的PHP函数。基本上,你想通过引入PHP函数来最大限度地简化代码,PHP函数在内部也会做同样的事情?为什么你需要这样做?一个以ID为键的数组似乎只在包含一些有用值的情况下才有用,而不是a(总是一样的)常量。@KingCrunch,我经常在
s中使用此功能,一个数组在“while”中传递,我在其中检查,如果当前值
在数组中设置了索引,就像这个问题中的输出一样。对不起,用我的英语说。@Khior你知道:函数调用很快,内置函数都是用C实现的。你真的认为你能够测量任何差异吗?;)(“微观优化是万恶之源”,尤其是当优化后的解决方案没有更好的时候)@KingCrunch这是真的-开销将是最小的。然而,我认为任何将已经是有效的方法压缩成更少代码行的尝试都只是另一种形式的微观优化!;)此外,您必须同意,他的自定义函数比使用内置函数的方法更具可读性,代码的可读性是关键。。
function foo($items)
{
    $result = array();
    foreach($items => $array)
    {
        $result[$array['id']] = TRUE;
    }
    return $result;
}
$r = array_combine( 
  array_map(function($i){ return $i['id']; }, $items), // <-- key
  array_fill(0, count($items), true /* or 1 */)        // <-- value
);