Увеличить или уменьшить каждый второй элемент массива PHP

Нужно увеличить или уменьшить каждый второй элемент массива. Нужно чтобы $event обновлялся через раз, то есть для четных элементов чтобы он перезапускал событие.

     <?php
class Player{

public $valueTeam = [];

public function setState($event){
    for ($i = 1; $i <= 12; $i++) {
        $this->valueTeam[] = $i;
    }
    for ($j = 1; $j <= count($this->valueTeam); $j++) {
        if ($j % 2 == 0) {
            if ($event === 1) {
                $this->valueTeam[$j] += 10;
            } else {
                $this->valueTeam[$j] -= 10;
            }
        }
    }
    print_r($this->valueTeam);
   }
 }
    $obj = new Player();
    $event = rand(1,2);
    $obj->setState($event);

Скрипт выводит следующее

[0] => 1
[1] => 2
[2] => -7
[3] => 4
[4] => -5
[5] => 6
[6] => -3
[7] => 8
[8] => -1
[9] => 10
[10] => 1
[11] => 12
[12] => -10

Или же так, в случае если $event равен 1

[0] => 1
[1] => 2
[2] => 13
[3] => 4
[4] => 15
[5] => 6
[6] => 17
[7] => 8
[8] => 19
[9] => 10
[10] => 21
[11] => 12
[12] => 10

Подскажите как обновлять $event , то есть первый четный элемент к примеру вычитывает значение, а второй четный элемент прибавляет.


Ответы (2 шт):

Автор решения: Borislav

Не уверен, что все равно понял полностью вашу задачу, но попробуйте данный код, постарался использовать все ваши инструкции:

class Player{

    public $valueTeam = [];

    public function setState()
    {
        $this->valueTeam = range(1, 12, 1);

        foreach ($this->valueTeam as $key => $value) {
            if ($key % 2 === 0) {
                if (rand(0, 1)) {
                    $this->valueTeam[$key] += 10;
                } else {
                    $this->valueTeam[$key] -= 10;
                }
            }
        }

        print_r($this->valueTeam);
    }
}

//Client side
(new Player())->setState($event);

Как результат, получаем следующий массив:

Array
(
[0] => 11
[1] => 2
[2] => 13
[3] => 4
[4] => 15
[5] => 6
[6] => -3
[7] => 8
[8] => -1
[9] => 10
[10] => 21
[11] => 12
)
→ Ссылка
Автор решения: HMRDevil

Попробуйте вот так:

<?php
class Player
{
    private $team = [];

    public function setTeam(array $team)
    {
        $this->team = $team;
    }

    public function setState()
    {
        foreach ($this->team as $key => $value)
        {
            if ((0 === $key % 2) && (true == rand(0,1)))
            {
                $this->team[$key] = $value + 10;
            }
            elseif ((0 === $key % 2) && (false == rand(0,1))
            {
                $this->team[$key] = $value - 10;
            }
        }
        print_r($this->team);
    }
}

for ($i = 0; $i <= 12; $i++)
{
    $niceTeam[] = $i;
}
$obj = new Player();
$obj->setTeam($niceTeam);
$obj->setState();

Немного усовершенствовал, передавать в объект можно любой массив. А если нужно создавать массив в объекте, то лучше в методе-конструкторе, так будет чище и правильнее.

→ Ссылка