我在WooCommerce工作,但我的问题与基本的PHP foreach
语句有关。
我有一个返回多维数组的函数。最顶层的维度,关键字符串是我需要的。如果你熟悉,$order->get_items();
。
order_item_id
被存储为关键字:
'488' => Array( /* Array stuffs */ )
488
是我需要的。如果我使用foreach
语句的函数是:
foreach ($items as $k => $v)
我只能使用$k
,但它设置为:
foreach ($items as $item)
有没有办法在数组中设置键的值并将其作为参数传递?
更新:
这是功能正常。
foreach($order_items as $item) {
$product = $order->get_product_from_item($item);
$gc_enabled = get_post_meta($product->id, 'ignite_gift_enabled', true);
if ( ! $gc_enabled)
continue;
$coupon_prefix = get_post_meta($product->id, '_coupon_prefix', true);
if ( ! $coupon_prefix)
$coupon_prefix = '';
for ($x = 1; $x <= $item['qty']; $x++) {
$new_coupon = $this->adjust_voucher( $coupon_prefix, $mode, $msg_details, $order_id, $order_item_id, $product->id );
}
}
$order_items
是一个项目数组,我需要将其传递给其他引用的函数,特别是adjust_voucher
。
答案 0 :(得分:2)
只需将foreach语法更改为foreach($items as $key => $item)
即可。这样,您就可以访问$key
,同时不会影响依赖$item
的循环中的任何现有代码。
答案 1 :(得分:0)
这是一种快速而肮脏的方法。如果你有一个大阵列会很昂贵 - 但除此之外它会起作用。
$items = $order->get_items();
array_walk($items, function(&$v, $i) { $v['id'] = $i; });
此代码向名为id
的数组添加另一个键,并为其指定当前键值。
需要PHP 5.4 +
示例强>
$arr = array(
486 => array(
'name' => 'Bob',
),
500 => array(
'name' => 'Sam',
),
);
array_walk($arr, function(&$v, $i) { $v['id'] = $i; });
print_r($arr);
示例结果
Array (
[486] => Array (
[name] => Bob
[id] => 486
)
[500] => Array (
[name] => Sam
[id] => 500
)
)
答案 2 :(得分:0)
您可以在数组中设置值(如果需要,可以调用堆栈)
我试过了,但是有一些值被检索出来 $项目[“富”。我试着将它设置为$ v ['foo'],但它已经破了。
foreach( $items as $key => &$item ) {
$item['id'] = $key;
/* $item now looks like
* [ 'id' => ...,
* ... ]
*/
} unset( $item ); //Needed otherwise references can become complicated