从返回的数组中获取密钥

时间:2014-03-21 19:39:52

标签: php

我在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

3 个答案:

答案 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