如何拆分数组键值以使其与另一个foreach循环迭代?

时间:2016-06-05 19:42:40

标签: php arrays wordpress foreach

我不确定我是否在这里使用正确的表达来描述我需要的东西。但是,我的意思是我有两个不同的数组,我需要在另一个数组的foreach循环中拆分一个特定的数组键值。

以下面的例子为例。

// This comes from a repeatable group of fields 

$food_prices = get_post_meta( get_the_ID(), '_prefix_food_price_group', true );

// I get the repeatable group fields' values with the following foreach loop:

foreach ((array) $food_prices as $key => $value) {


    if (!(isset($value['price_legend']))) { 
        // do nothing
    } else {
        $price_label =  esc_html($value['price_label']);
    }

    if (!(isset($value['price']))) { 
        // do nothing
    } else {
        $sale_price =  esc_html($value['price']);
    }

    echo '<div><span>Label: </span>'. $price_label .'</div>';
    echo '<div><span>Price: </span>'. $sale_price .'</div>';

}

对于我在编辑帖子时为上面的自定义字段设置的任何值,上面的foreach循环将产生如下内容:

价格 25,90

价格: 32,90

价格: 39,90

到目前为止,上面给出了所有重复的price字段值,但它也意味着我得到了每个帖子手动设置的值。虽然这是预期的行为,但我认为创建全球定价选项可以在价格变化的情况下轻松维护。

...

为了实现这一点,我创建了一个函数,以后会抓住&#34; global&#34;来自主题选项的定价选项,但是现在我已经手动创建了一个数组,其中的值将替换帖子的可重复自定义字段(如果设置),所以这里的功能:

function get_global_food_menu_prices() {

    //$small_pizza = get_option( $post_id, 'small_size_price' );
    $small_pizza[0] = '25,90';
    $medium_pizza[1] = '32,90';
    $large_pizza[2] = '39,90';

    $food_menu_prices = ['small_pizza'=>$small_pizza, 'medium_pizza'=>$medium_pizza, 'large_pizza'=>$large_pizza];

      return $food_menu_prices;

    //var_dump($food_menu_prices);

}

以上var_dump($food_menu_prices);会产生以下结果:

array (size=3)
    'samll_pizza' => 
        array (size=1)
            0 => string '25,90' (length=5)
    'medium_pizza' => 
        array (size=1)
            1 => string '32,90' (length=5)
    'large_pizza' => 
        array (size=1)
            2 => string '39,90' (length=5)

现在,如何在第一个foreach循环的每次迭代中分割数组$food_menu_prices的键值?

我的意思是&#34;分裂&#34;是每次第一个foreach从其值数组中打印重复的price键值时,我希望它从$food_menu_prices数组中打印一个键值。

我尝试过类似下面的内容,但会返回get_global_food_menu_prices()函数中的所有键值。

foreach ((array) $food_prices as $key => $value) {


    if (!(isset($value['price_legend']))) { 
        // do nothing
    } else {
        $price_label =  esc_html($value['price_label']);
    }

    if (!(isset($value['price']))) { 
        // do nothing
    } else {
        $sale_price =  esc_html($value['price']);
    }

    echo '<div><span>Label: </span>'. $price_label .'</div>';

    if function_exists('get_global_food_menu_prices') { 
        echo get_global_food_menu_prices();
    } else {
        echo '<div><span>Price: </span>'. $sale_price .'</div>';
    }

}

显然,它会返回:

价格 25,90 32,90 39,90 当我希望每个键值在上面的foreach循环中单独回显时。

1 个答案:

答案 0 :(得分:0)

我不确定你的意思是“分裂”。

我认为

$small_pizza = '25,90';
$medium_pizza = '32,90';
$large_pizza = '39,90';

$food_menu_prices = ['small_pizza'=>$small_pizza, 'medium_pizza'=>$medium_pizza, 'large_pizza'=>$large_pizza];

将在$food_menu_prices哈希中设置您想要的值。我假设您要在第一个foreach中访问此内容,您希望根据大小查找披萨的全球价格。这应该工作。