Почему значение, которое я ищу в массиве, не возвращает true, даже если совпадающее значение существует? - PullRequest
0 голосов
/ 29 января 2019

Я пытался понять это за последние 3 часа.Я генерирую случайное число, 0 - 36. Я также генерирую массив с номерами 0-36 с шагом 2 (только неровные числа).Я делаю var_dump как для случайного числа, так и для массива, и вижу соответствующее значение в массиве, однако мой оператор if не вернет true.

Я также пытался in_array, и это не сработало.Я пытался array_map, не повезло ... Я бесконечно гуглил и пробовал все, что только мог придумать.Что дает?

$this->number = rand(0, 36); 
$this->colorBlack = array(range(1, 36, 2));

foreach ($this->colorBlack as $this->color){

            var_dump($this->color);
            var_dump($this->number);

        if ($this->color == $this->number){
            echo 'yes';
            var_dump($this->colorBlack);
        }
    }

Я ожидаю, что приведенный выше код будет return true, когда сгенерированное случайное число соответствует значению в массиве, однако это не так.

Дамп Var выглядит так:

array(18) { [0]=> int(1) [1]=> int(3) [2]=> int(5) [3]=> int(7) [4]=> int(9) [5]=> int(11) [6]=> int(13) [7]=> int(15) [8]=> int(17) [9]=> int(19) [10]=> int(21) [11]=> int(23) [12]=> int(25) [13]=> int(27) [14]=> int(29) [15]=> int(31) [16]=> int(33) [17]=> int(35) } int(26)

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Функция range уже возвращает массив, и вы снова оборачиваете его в массив в этой строке:

$this->colorBlack = array(range(1, 36, 2));

Это означает, что теперь у вас есть массив с 1 элементомв нем, который является массивом, который возвращает диапазон.

При запуске foreach ($this->colorBlack as $this->color){ эта часть $this->color будет указывать на первый элемент, который является массивом.

Затем эта строка if ($this->color == $this->number){ сравнивает число из диапазона с массивом, который не работает.

Одним из решений может быть не заключать возвращаемое значение из диапазона в массив, например:

$this->colorBlack = range(1, 36, 2);

Демо php

0 голосов
/ 29 января 2019

У вас короткий цикл foreach, ваши значения вложены, поэтому переходите на один уровень вниз, то есть:

<?php
$number = rand(0, 36);
$colorBlack = array(range(1, 36, 2));

foreach ($colorBlack as $color){
   foreach($color as $k => $gotcha) {
       if ($gotcha == $number){
           echo 'yes';
           var_dump($colorBlack);
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...