2016-04-22 3 views
-2

У меня есть массив:Работа с массивами - клон

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

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

Как я могу на основе Qty может преобразовать массив следующим образом:

$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

использовать цикл for, основанный на qty, – 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

Итерации по каждой строке исходного массива, а затем для каждого подсчета количества, нажмите запись на новый массив с идентификатором текущей строки.

// 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

Смежные вопросы