2014-02-14 49 views
0

這是示例代碼:array_push不插入值

//$pieces is an stdClass object which has 4 elements the foreach loops through 
$arr = array(); 
foreach($pieces as $piece) 
{ 
    $piece->value = 1; 
    array_push($arr, $piece); 

    $piece->value = 3; 
    array_push($arr, $piece); 
} 

與問題是,它不使用第一array_push,就像它不是在那裏,在我得到的結果:

Array 
(
    [0] => stdClass Object 
     (
      [piece] = 3 
     ) 
    [1] => stdClass Object 
     (
      [piece] = 3 
     ) 
    [2] => stdClass Object 
     (
      [piece] = 3 
     ) 
    [3] => stdClass Object 
     (
      [piece] = 3 
     ) 
) 

雖然應該有額外的4鍵[piece] = 1。難道我做錯了什麼?

+0

提示:你是否考慮過對單個項目使用'$ array [] = $ value'與'array_push'? – Marty

+0

@Marty當然,結果是一樣的。 – Lucas

+0

當然,閱讀更好,打字速度更快,效率更高(小規模)。 – Marty

回答

1

您必須複製$piece對象,您的代碼當前將對$piece的引用保存到$arr中。這段代碼假設您需要陣列中$piece變體的實際副本。

$arr = array(); 
foreach($pieces as $piece) 
{ 
    $first_clone = clone $piece; 
    $first_clone->value = 1; 
    array_push($arr, $first_clone); 

    $second_clone = clone $piece; 
    $second_clone->value = 3; 
    array_push($arr, $second_clone); 
} 
+0

我想第二個克隆是不需要的? – Lucas

+0

取決於您的用例。如果你需要'$ arr'中的所有對象獨立於'$ pieces',你需要兩個克隆。 – marionebl

1

對象始終是引用。在嘗試使用它之前,您需要使用clone這個對象,好像它是兩個不同的東西。