Увеличить или уменьшить каждый второй элемент массива 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 шт):
Не уверен, что все равно понял полностью вашу задачу, но попробуйте данный код, постарался использовать все ваши инструкции:
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
)
Попробуйте вот так:
<?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();
Немного усовершенствовал, передавать в объект можно любой массив. А если нужно создавать массив в объекте, то лучше в методе-конструкторе, так будет чище и правильнее.