【问题标题】:Loop through foreach statement and add into empty multi dimensional array循环遍历foreach语句并添加到空的多维数组中
【发布时间】:2018-12-18 18:27:30
【问题描述】:

我正在尝试使用 foreach 循环中的名称和值填充一个空数组。我创建了一个数组$variationimages = array();,并在循环中使用$variationimages['name']$variationimages['image'] 保存值。

当返回 $variationimages 数组时,我只得到第一项

Array
(
    [name] = Wall Profile
    [image] = <img src="example-image.jpg">
)

我希望它返回类似下面的内容,并能够通过使用类似 $variationimages['Roof Profile']['image'] 的方式访问数组中的特定项目,这将返回名为“屋顶轮廓”的项目的图像.

 Array
    (
        [name] = Wall Profile
        [image] = <img src="example-image.jpg">
    ), 
(
            [name] = Roof Profile
            [image] = <img src="example-image.jpg">
        ),

我的代码如下:

function loop_display_variation_attribute_and_thumbnail() {
    global $product;

    // HERE your targeted product attribute taxonomy
    $taxonomy = 'pa_product_type';
    $variationimages = array();

    if( $product->is_type('variable') ) {
        foreach ( $product->get_available_variations() as $variation ) {

            if( isset($variation['attributes']['attribute_'.$taxonomy]) ) {
                // Get the "pa_product_type"
                $term_name = get_term_by('slug', $variation['attributes']['attribute_'.$taxonomy], $taxonomy)->name;
                $term_slug = get_term_by('slug', $variation['attributes']['attribute_'.$taxonomy], $taxonomy)->slug;

                $variationimages['name'] = get_term_by('slug', $variation['attributes']['attribute_'.$taxonomy], $taxonomy)->name;
                $variationimages['image'] = '<img style="display:none;" class="'.$term_slug.'-image" src="' . $variation['image']['thumb_src'] .'">';
            }
        }
        echo "<div style='display:none'>"; 
                print_r($variationimages);
                echo "</div>";
    }
}

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

    Shaun,只需在此处的变量上添加额外的 []:

    $variationimages['name'][] = get_term_by('slug', $variation['attributes']['attribute_'.$taxonomy], $taxonomy)->name;
    $variationimages['image'][] = '<img style="display:none;" class="'.$term_slug.'-image" src="' . $variation['image']['thumb_src'] .'">';
    

    在每次迭代中,它都会追加新值。

    干杯 ;-)

    ---评论后编辑---

    $variationimages[] = [
        'name'  => get_term_by('slug', $variation['attributes']['attribute_'.$taxonomy], $taxonomy)->name,
        'image' => '<img style="display:none;" class="'.$term_slug.'-image" src="' . $variation['image']['thumb_src'] .'">'
    ];
    

    【讨论】:

    • 嗨@JohnnyB1988。感谢您的回答。我已经添加了您提到的代码,但它将名称和图像值分组在单独的数组中。我想要一个数组中的名称和图像,就像我上面的示例一样
    【解决方案2】:

    我认为你必须用对象或数组数组填充数组

    like ,你必须创建类例如 Item $one_item= new Item();

    然后写这样的代码:

    function loop_display_variation_attribute_and_thumbnail() {
        global $product;
    
        // HERE your targeted product attribute taxonomy
        $taxonomy = 'pa_product_type';
        $variationimages = array();
    
        if( $product->is_type('variable') ) {
            foreach ( $product->get_available_variations() as $variation ) {
    
                if( isset($variation['attributes']['attribute_'.$taxonomy]) ) {
                    // Get the "pa_product_type"
                    $term_name = get_term_by('slug', $variation['attributes']['attribute_'.$taxonomy], $taxonomy)->name;
                    $term_slug = get_term_by('slug', $variation['attributes']['attribute_'.$taxonomy], $taxonomy)->slug;
    $one_item=New Item ();
    
                    $one_item=>name = get_term_by('slug', $variation['attributes']['attribute_'.$taxonomy], $taxonomy)->name;
                    $one_item=>image = '<img style="display:none;" class="'.$term_slug.'-image" src="' . $variation['image']['thumb_src'] .'">';
    array_push($variationimages,$one_item);
    
                }
            }
            echo "<div style='display:none'>"; 
                    print_r($variationimages);
                    echo "</div>";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 1970-01-01
      • 2014-06-01
      • 2013-03-26
      • 2013-04-01
      相关资源
      最近更新 更多