【问题标题】:How to add items to array from a setter如何从二传手将项目添加到数组
【发布时间】:2017-06-03 11:35:59
【问题描述】:

我是 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;
}

结果应该是这样的

{ {{"name":"{{Name}}","value":"Foo"}, {"name":"{{Age}}","value":"20"}, {"name":"{{mission}}","value":"none"}}, { {{"name":"{{Name}}","value":"Bar"}, {"name":"{{Age}}","value":"25"}, {"name":"{{mission}}","value":"none"}} }

每当我遍历 For 循环时,我总是得到最后一个项目,我想得到所有项目并像结果中提到的那样显示它们。

【问题讨论】:

  • setter 覆盖现有数据,因此您必须收集数据并在循环后设置它
  • 是的,但我该怎么做

标签: php arrays class for-loop setter


【解决方案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}";
    }
}

【讨论】:

  • 好吧,我想这会解决它,以防万一我有不同的键,但我想用相同的键向 $output 添加新项目,我已经更新了我的问题,请你看看。谢谢
  • 你试过我的解决方案了吗?它应该正是你想要的
  • 查看我的解释了解更多详情。希望这会奏效
  • 谢谢,但在我使用你的解决方案之前,我 var_dump($output) 发现它包含所有键和值,所以我只需要显示它们,但不知道如何。
猜你喜欢
  • 1970-01-01
  • 2015-06-12
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
相关资源
最近更新 更多