2017-06-03 51 views
1

我是PHP OOP的新手,我想知道如何從setter添加或推送新項目到數組並顯示所有項目,這裏是我的代碼。如何從setter添加項目到陣列

$r = "/some regex here/"; 
for ($i = 0; $i < count($p[0]); $i++) 
{ 
    preg_match($r, $text, $value); 
    preg_match($r, $schema, $name); 

    $this->setTheOutput('name', $name[1]); 
    $this->setTheOutput('value', $value[1]); 
} 

這是另一大類陣列

protected $output = []; 

protected function setTheOutput($name, string $value) 
{ 
    $this->output[$name] = $value; 
} 

的結果應該

{{{ 「名」: 「{{名稱}}」,「值「:」Foo「},{」name「:」{{Age}}「,」value「:」20「}, {」name「:」{{mission}}「,」value「:」none「 }},{{「name」:「{{Name}}」,「value」:「Bar」},{「name」:「{{Age}}」,「value」:「25」}, {「name」:「{{mission}}」,「value」:「none」}}}

每當我循環For循環,我總是得到最後一個項目,我想要獲得所有項目,並像結果中提到的那樣顯示它們。

+0

二傳手覆蓋現有的數據,所以你必須收集你的數據和環路 –

+0

是後置的,但我怎麼能做到這一點 – Mana

回答

1

您將不斷覆蓋相同鍵的值。

你可能想,如果相應的鍵不存在,並且在分配飽和的情況下新的關聯數組值添加到最後的關聯數組。

protected $output = []; 

protected function setTheOutput($name, string $value) 
{ 
    $last = end($this->output); 
    if(array_key_exists($name, $last) { 
     $this->output[] = [$name => $value]; 
    } else { 
     $last[$name] = $value; 
    } 
} 

的結構將是這樣的:

Array(
    Array(
     key1 => value1, 
     key2 => value2 
    ), 
    Array(
     key1 => value3, 
     key2 => value4 
    ), 
    ... 
    Array(
     key1 => value5, 
     key2 => value6 
    ) 
) 

功能得到外陣列的最後一個元素,並檢查是否必須被已經插入的關鍵字的最後一個內陣列中存在或不。 如果存在,則會分配另一個內部數組,並在此處指定鍵值對。否則,鍵值對將被簡單地追加。

顯示值:

foreach($output as $line) { 
    foreach($line as $k => $v) { 
     echo "key ${k} value ${v}"; 
    } 
} 
+0

好吧,我認爲這將解決它只是在萬一我有不同的鑰匙,但我想增加新項目以相同的密鑰$輸出,我已經更新了我的問題,請你能擁有的外觀。謝謝 – Mana

+0

您是否嘗試過我的解決方案?它應該是正是你想要 –

+0

檢查我的解釋進一步的細節內容。希望將工作 –