2016-04-22 35 views
-2

我有一个数组:使用数组 - 克隆

$obj = Array 
(
    [0] => stdClass Object 
     (
      [id] => 1 
      [qty] => 2 
     ) 

    [1] => stdClass Object 
     (
      [id] => 2 
      [qty] => 1 
     ) 
); 

我如何可以根据数量可以将数组转换成这样:

$obj2 = Array 
(
    [0] => stdClass Object 
     (
      [id] => 1 
      [qty] => 1 
     ) 

    [1] => stdClass Object 
     (
      [id] => 1 
      [qty] => 1 
     ) 
    [2] => stdClass Object 
     (
      [id] => 2 
      [qty] => 1 
     ) 
); 

谢谢!

+0

那么正常的人做什么它的其他方式。但是在做这件事时,问题在哪里? – Rizier123

+2

你刚刚做到了。 – Marcus

+0

使用基于数量的循环, – Dale

回答

4

这应该工作:

<?php 
$obj = array(
    0 => (object) array(
     'id' => 1, 
     'qty' => 2 
    ), 
    1 => (object) array(
     'id' => 2, 
     'qty' => 1 
    ) 
); 

$obj2 = array(); 

foreach($obj as $v) 
{ 
    if($v->qty > 1) 
    { 
     while($v->qty > 0) 
     { 
      $obj2[] = (object) array('id'=>$v->id, 'qty'=>1); 
      --$v->qty; 
     } 
    } 
    else 
    { 
     $obj2[] = $v; 
    } 
} 

print_r($obj2); 
+1

我承认喜欢这个答案比我自己更好:) –

1

遍历原始数组的每一行,然后对每个数量的计数,将条目推入具有当前行的id的新数组中。

// SETTING UP INITIAL DATA FOR EXAMPLE 
$object1 = new StdClass(); 
$object2 = new StdClass(); 

$object1->id = 1; 
$object1->qty = 2; 

$object2->id = 2; 
$object2->qty = 1; 

$array = array(
    $object1, 
    $object2 
); 
// END SETTING UP INITIAL DATA 

$array2 = array(); 

foreach($array as $row) 
{ 
    for($i = 0; $i < $row->qty; $i++) 
    { 
     $stdClass = new StdClass(); 
     $stdClass->id = $row->id; 
     $stdClass->qty = 1; 
     $array2[] = $stdClass; 
    } 
} 

Live Example