如何从setter

时间:2017-06-03 11:35:59

标签: php arrays class for-loop setter

我是PHP OOP的新手,我想知道如何从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;
}

结果应该是

  

{{{&#34; name&#34;:&#34; {{Name}}&#34;,&#34; value&#34;:&#34; Foo&#34;},{& #34;名称&#34;:&#34; {{年龄}}&#34;&#34;值&#34;:&#34; 20&#34;},   {&#34; name&#34;:&#34; {{mission}}&#34;,&#34; value&#34;:&#34; none&#34;}},{   {{&#34; name&#34;:&#34; {{Name}}&#34;,&#34; value&#34;:&#34; Bar&#34;},{&#34; name& #34;:&#34; {{年龄}}&#34;&#34;值&#34;:&#34; 25&#34;},   {&#34; name&#34;:&#34; {{mission}}&#34;,&#34; value&#34;:&#34; none&#34;}}}

每当我循环For循环时,我总是得到最后一项,我想获得所有项目并显示结果中提到的那些。

1 个答案:

答案 0 :(得分: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}";
    }
}