Как добавить элементы в массив из сеттера

Я новичок в PHP ООП, я хочу знать, как добавить или передать новый элемент в массив из установщика и отобразить все элементы, вот мой код.

$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»}}}

Всякий раз, когда я повторяю цикл «За», я всегда получаю последний элемент, я хочу получить все элементы и отображать их, как указано в результате.

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}";
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]