2016-04-22 15 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

qtyに基づいてforループを使用すると、 – 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