【问题标题】:How can I split an array key values so it iterates with another foreach loop?如何拆分数组键值,使其与另一个 foreach 循环一起迭代?
【发布时间】:2016-06-05 19:42:39
【问题描述】:

我不确定我是否在这里使用了正确的表达方式来描述我的需求。但是,我的意思是我有两个不同的数组,我需要在另一个数组的 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 字段值,但这也意味着我将获得基于每个帖子手动设置的值。尽管这是预期的行为,但我认为创建全局定价选项可以在价格发生变化时轻松维护。

...

为此,我创建了一个函数,该函数稍后会从主题选项中获取“全局”定价选项,但现在我手动创建了一个数组,其值将替换帖子的可重复自定义字段(如果已设置) ,所以这是函数:

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 的键值?

我对“拆分”的意思是,每次第一个 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 循环中分别回显每个键值时。

【问题讨论】:

    标签: php arrays wordpress foreach


    【解决方案1】:

    我不确定您所说的“拆分”是什么意思。

    我觉得

    $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 中访问它,您想在其中根据大小查找比萨饼的全球价格。这应该有效。

    【讨论】:

    • 感谢您的意见。好吧,也许我在尝试解释我想要实现的目标时不够清楚,但是是的,我想从 $food_menu_prices 获取关键值,以便在第一个 foreach 循环中单独回显。跨度>
    • 那我给你的应该可以了。您现在可以在第一个 foreach 循环中使用 $food_menu_prices['small_pizza'] 来获取值 '29,90'$food_menu_prices['medium_pizza'] 为 '32,90' 等等。
    猜你喜欢
    • 2016-12-20
    • 2020-02-20
    • 2013-12-15
    • 2013-07-06
    • 2015-07-09
    • 2014-04-20
    • 2015-11-13
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多