Php, проблема с увеличением значения ключа на 1 - PullRequest
0 голосов
/ 28 мая 2019

Я потратил 2 дня, чтобы разобраться с этой проблемой.Я пытаюсь создать сценарий голосования, который читает файл .txt и изменяет значения внутри него.У меня есть проблема с foreach частью, где я пытаюсь добавить +1 в голосах человека.1-5 это идентификатор человека, номер после |количество голосов.Первый вывод:

Array
(
[0] => 1|2

[1] => 2|6

[2] => 3|8

[3] => 4|3

[4] => 5|10

, и я хочу добавить только +1 в последнем числе.Но если я пытаюсь использовать инкремент, я получаю сообщение об ошибке: «Неустранимая ошибка PHP: невозможно увеличить / уменьшить перегруженные объекты или смещения строк в ...»

foreach ($file_contents as &$id) {
  if ($id == 2) {
    $id[2]++;
  }
}

print_r($file_contents);

Я все еще изучаю PHP, и это страннодля меня, потому что просто давая «$ id [2] = 8» фактически изменяет это значение.Почему ++ не может быть использован?Как обойти это?

Array
(
[0] => 1|2

[1] => 2|8

[2] => 3|8

[3] => 4|3

[4] => 5|10
)

1 Ответ

1 голос
/ 28 мая 2019

Используйте вместо этого json.Это сделает вашу жизнь намного проще.

Json - это текстовая строка, которую можно декодировать в массив.
Либо индексированный массив, либо ассоциативный массив.На мой взгляд, ассоциативная предпочтительна в этом случае.

$votes = ["1" => 2, "2" => 6, "3" => 8, "4" => 3, "5" => 10];
// Above is an associative array with the same data as your example. 
// The key is the id and the value is the votes.
// To read it from the file use:
// $votes = json_decode(file_get_contents("file.txt"));

$inputVote = 2; // someone voted on person 2.

if(!isset($votes[$inputVote])) $votes[$inputVote] = 0; // if someone voted on a person not already in the array, add the person to the array. 

$votes[$inputVote]++; // increments the votes on person 2.

file_put_contents("file.txt", json_encode($votes));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...