PHP7向函数传递键和值的最佳/简洁方法

PHP7向函数传递键和值的最佳/简洁方法,php,arrays,php-7,Php,Arrays,Php 7,我有一个疑问,是否有些东西可以改进 我有一个包含键和值的数组 我想将这些键和值传递到一个函数中,每一行作为单独的实体 阵列示例: 我目前使用: foreach($data['basket']['products'] as $product => $quantity) { $basketClass->addItem($product,$quantity); } unset($product,$quantity); 这是4行 我不想更改数组中的值

我有一个疑问,是否有些东西可以改进

我有一个包含键和值的数组

我想将这些键和值传递到一个函数中,每一行作为单独的实体

阵列示例:

我目前使用:

    foreach($data['basket']['products'] as $product => $quantity) {
        $basketClass->addItem($product,$quantity);
    }
    unset($product,$quantity);
这是4行

我不想更改数组中的值,只想将它们逐行应用于
->addItem
函数


有没有一种更简短、更简洁或更“干净”的方法,特别是对新的PHP7能力的开发

您可以使用
array\u walk

array_walk($data['basket']['products'], function($quantity, $product) use($basketClass) { 
 $basketClass->addItem($product,$quantity);
});

您可以使用
array\u walk

array_walk($data['basket']['products'], function($quantity, $product) use($basketClass) { 
 $basketClass->addItem($product,$quantity);
});

除了将更多的代码塞进一行之外,没有很多“更短”的方法可以做到这一点,但您可能会发现使用
array\u walk

array_walk($data['basket']['products'], function($quantity, $product) use($basketClass) {
  $basketClass->addItem($product, $quantity);
});
这不会修改数组本身,也不需要您在之后取消设置任何变量。有关示例,请参见


不过,这最终还是个人意见的问题。

除了将更多代码塞进一行之外,没有多少“更短”的方法可以做到这一点,但您可能会发现使用
array\u walk

array_walk($data['basket']['products'], function($quantity, $product) use($basketClass) {
  $basketClass->addItem($product, $quantity);
});
这不会修改数组本身,也不需要您在之后取消设置任何变量。有关示例,请参见


不过,这最终还是个人意见的问题。

它看起来很难看,但确实有效

$a = $data['basket']['products'];
array_map(
   "call_user_func", 
   array_fill(0, count($a), array($basketClass, "addItem")), 
   array_keys($a), array_values($a)
);
好吧,如果你去掉这条线,它将是一条线

array_map("call_user_func", array_fill(0, count($a), array($basketClass, "addItem")), array_keys($a), array_values($a));

它看起来很难看,但很管用

$a = $data['basket']['products'];
array_map(
   "call_user_func", 
   array_fill(0, count($a), array($basketClass, "addItem")), 
   array_keys($a), array_values($a)
);
好吧,如果你去掉这条线,它将是一条线

array_map("call_user_func", array_fill(0, count($a), array($basketClass, "addItem")), array_keys($a), array_values($a));


短于3行?:四行。Foreach留下了应该整理的剩余值。3行,因为
{}
可以删除(-;我的评论有点争议;),但我认为这是个人意见的问题-看看这个reddit线程-如果性能上的细微差异与您无关,当然,您可以尝试
array\u walk
——正如回答中已经提到的那样,这不是更少的代码(实际上更多),但您可以重新构造它吗
$basketClass->addItemsFromArray($data['basket']['products'])
然后执行循环/数组遍历(不需要unset,因为它位于该函数的范围内)。导致附加代码,但会将此部分减少为一行“_(ツ)_/“”。对我来说似乎是微观优化,但你一定有理由想让它更整洁,所以我只想说将处理移到其他地方。短于3行?:d*4行。Foreach留下了应该整理的值。3行,因为
{}
可以删除(-;我的评论有点争议;)但我认为这是个人观点的问题——看看这个reddit线程——如果性能上的这一微小差异与您无关,您当然可以尝试
array\u walk
——正如回答中已经提到的那样,它的代码不少(实际上更多),但您可以重新构造它?
$basketClass->addItemsFromArray($data['basket']['products']
然后在那里执行循环/数组_walk(不需要设置unset,因为它被定位到该函数的范围内)。会产生额外的代码,但会将此部分减少到一行”_(ツ)_/“”。对我来说,这似乎是一种微观优化,但你一定有理由想让它更整洁,所以我只能说将处理移到其他地方。谢谢,我看过了
array\u walk
,但感觉不太“整洁”(但这完全是主观的)这是可能的,但我觉得这是一个更可读的代码,但它完全是主观的:)是的,有一个交易可读性的因素,简洁,但谢谢。+1我看过
array
但感觉不那么“整洁”(但这完全是主观的)这是可能的,但就我的口味而言,这似乎是一个更具可读性的代码,但这完全是主观的:)是的,有一个因素可以用可读性换取简洁性,但谢谢。+1是的,正如你所说,这取决于个人意见;我发现
array\u walk
不太整洁,但我很好奇社区是否知道(整洁)快捷方式。是的,我同意。对我来说,标准循环总是更具可读性。如果只是之后留下的变量是个问题,那么你可以安全地将它们保留在范围内-通常只有在通过引用循环时才会引起问题。要么你再也不使用它们,要么你用其他方法覆盖它们se.我看到通过array_walk,变量得到了整理,这在我看来是一个加号。+1是的,正如你所说,这取决于个人观点;我发现
array_walk
不太整洁,但很好奇社区是否知道(整洁)快捷方式。是的,我同意。对我来说,标准循环总是更具可读性。如果只是之后留下的变量是个问题,那么你可以安全地将它们保留在范围内-通常只有在通过引用循环时才会引起问题。要么你再也不使用它们,要么你用其他方法覆盖它们我看到array_walk将变量整理好,在我看来这是一个加号。+1