复制多维数组

时间:2016-03-15 15:27:15

标签: php arrays multidimensional-array

get() 多维数组并将其存储在 $ products 变量中。

我需要制作该数组的副本以将其创建到新的Webshop中,因为API提供的导出不起作用所以我创建了此脚本来复制数据:

foreach ($products as $id => $product) {

    $copy = $products[$id];
    $createdProducts = $apiSkylux->products->create(
        array(
            'id' => $copy['id'],
            'createdAt' => $copy['createdAt'],
            'updatedAt' => $copy['updatedAt'],
            'isVisible' => $copy['isVisible'],
            'visibility' => $copy['visibility'],
            'data01' => $copy['data01'],
            'data02' => $copy['data02'],
            'data03' => $copy['data03'],
            'url' => $copy['url'],
            'title' => $copy['title'],
            'fulltitle' => $copy['fulltitle'],
            'description' => $copy['description'],
            'content' => $copy['content'],
            'set' => $copy['set'],
            'brand' => $copy['brand'],
            'categories' => $copy['categories'],
            'deliverydate' => $copy['deliverydate'],
            'image' => $copy['image'],
            'images' => $copy['images'],
            'relations' => $copy['relations'],
            'reviews' => $copy['reviews'],
            'type' => $copy['type'],
            'attributes' => $copy['attributes'],
            'supplier' => $copy['supplier'],
            'tags' => $copy['tags'],
            'variants' => $copy['variants'],
            'movements' => $copy['movements'],

        )
    );

}

副本正常运行。但我认为 @ 2016 并且所有这些都不能用更少的代码行来实现吗?

这是我通过第一个数组var_dump收到的内容:

var_dump($products[0]);
    exit;
//result
array(28) {
  ["id"]=>
   int(26136946)
//rest of array

所以我可以看到数组有一个数字(28),这代表什么?

我尝试了几次尝试,最接近的尝试是:

$copy = $products[$id];
            $createProducts = $products;
            $createdProducts = $apiSkylux->products->create($createProducts);

但后来我也得到了error : Invalid data input

我可以比我目前使用的方法更容易地从数组中复制数据吗?

2 个答案:

答案 0 :(得分:2)

array(
    'id' => $copy['id'],
    ...
)

这可以简化为:

$copy

是的,将每个键重新分配到一个新数组与首先使用原始数组相同。

foreach($products as $id => $product){
    $copy = $products[$id];

这可以简化为:

foreach ($products as $product){
    $copy = $product;

显然,您可以完全忽略$copy并使用$product

底线:

foreach ($products as $product) {
    $createdProducts = $apiSkylux->products->create($product);
}

你对$createdProducts做什么我不知道;你似乎没有在循环中做任何事情,所以最好它会在循环后保留最后一个产品,所以可能是多余的。

可能你可以这样做:

array_map([$apiSkylux->products, 'create'], $products);

$createdProducts = array_map([$apiSkylux->products, 'create'], $products);

取决于您是否需要返回值。

  

所以我可以看到数组有一个数字(28),这代表什么?

这意味着它是一个包含28个元素的数组。

答案 1 :(得分:1)

这没有任何意义。只需在循环中使用$product变量即可。完成!