简体   繁体   中英

Fill array with dynamic content in PHP

I need to fill an array with a dynamic list of products. To do so, I'm using the following code:

$list_array = array(

        $products[] = array(
            'SKU' => '0001',
            'Title' => 'Bread',
            'Quantity' => '',
        ),

        $products[] = array(
            'SKU' => '0002',
            'Title' => 'Butter',
            'Quantity' => '',
        )

    );

return $list_array;

It works fine if I know every product in the array. But in my use case I have no idea which products are in the array.

So I want to fill the array with dynamic data.

I came up with something this:

$products = get_posts( 'numberposts=-1&post_status=publish&post_type=product' );

foreach ( $products as $product ) {

    $products[] = array(
        'SKU'       => $product->id,
        'Title'     => $product->post_title,
        'Quantity'  => '',
    ),

}

return $products;

I know there is something really wrong with the array. But I couldn't figure out what it is.

The code you submitted cannot work. The short syntax $a[] =... is to append data to the $a array, for example:

$a = [];
$a[] = 1;
$a[] = 2;
// $a = [1, 2]

You can also do it in a more efficient way with a map function:

function reduce($product)
{
    return array(
        'SKU'       => $product->id,
        'Title'     => $product->post_title,
        'Quantity'  => '',
    );
}

return array_map('reduce', $products);

It will execute the function reduce and replace value for each element of you array. Complete doc here: https://www.php.net/manual/en/function.array-map.php

Your problem is that you are overwriting the $products array that you are looping over inside the loop. Change the name of the variable in the loop to fix that:

$list_array = array();
foreach ( $products as $product ) {
    $list_array[] = array(
        'SKU'       => $product->id,
        'Title'     => $product->post_title,
        'Quantity'  => ''
    );
}
return $list_array;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM