проверить наличие объекта в массиве - PullRequest
4 голосов
/ 08 августа 2009

сначала я хочу сказать, что я новичок в PHP.

У меня есть реализация, которая проверяет, находится ли объект в массиве или нет, если не добавляет другой массив. Но он всегда возвращает false и добавляет в массив theorder.

Как мне это решить?

Здесь часть кода:

$temp = new tempClass($x, $y);

    if (!in_array($temp, $temp_array)) {
            $temp2_array[] = $temp;
    }

Ответы [ 2 ]

10 голосов
/ 08 августа 2009

Поскольку вы добавляете экземпляры в массив, убедитесь, что массив in_array() использует строгий режим сравнения:

$temp = new tempClass($x, $y);

if (!in_array($temp, $temp_array, true)) {
  $temp2_array[] = $temp;
}

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

Вы можете опустить строгий режим, который будет сравнивать членов класса, но как только у вас будет другой член, он будет не равен.

$temp = new tempClass($x, $y);

if (!in_array($temp, $temp_array)) {
  $temp2_array[] = $temp;
}
0 голосов
/ 08 августа 2009

Я думаю, это потому, что вы проверяете ссылку на новый объект в вашем массиве, а не значения этого объекта. Попробуйте сделать:

print_r($temp_array);

И посмотрите, что вы получите ... это должно дать вам представление о том, как это исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...