#php #class #if-statement #foreach
#php #класс #if-оператор #foreach
Вопрос:
Я пытаюсь перебрать массив, назначенный объекту. Функция entity_products_check() должна сравнивать отправленный продукт с массивом предварительно сохраненных значений из базы данных. Цикл foreach должен вычисляться как true в предоставленном тестовом примере. Однако по причинам, которые я не могу понять, оператор === возвращает empty (т. Е. null), и XAMPP оценивает его как false . По какой-то странной причине это происходит только в том случае, если проверяется первое значение. Для любого другого результата он выполняется правильно. Я не понимаю, почему это происходит?
$entity=array("products"=>array("machine", "lollipop"));
class Borrowing_Cost
{
public array $entity;
public array $item;
public array $borrowing;
public function __construct($entity, $item, $borrowing)
{
$this->entity = $entity;
$this->item = $item;
$this->borrowing = $borrowing;
}
public function entity_products_check($arg){
$is_item = "";
**foreach ($this->entity["products"] as $value){
if($value === $arg){
$is_item = "true";
} else {
$is_item = "false";
}
}**
return $is_item;
}
}
$borr = new Borrowing_Cost($entity, $item, $borrowing);
echo $borr->entity_products_check("machine") . "<br>";
Комментарии:
1.
===
никогда не возвращаетempty
(что является пустым в сравнениях?) илиNULL
. Он возвращаетсяtrue
илиfalse
, и ничего больше. Второе — это ваш цикл, в$is_item
котором будет только последнее значение. Например, в foreach будет 10 элементов, 3-й будет true , но функция возвращает false (потому что последний имеет значение false).2. Вы должны включить отчеты об ошибках, ваш код генерирует несколько.
Ответ №1:
В вашем коде вы сравниваете каждый элемент со значением, которое вы ищете, поэтому после того, как он его найдет, он все равно перейдет к следующему элементу и установит флаг false
. .
Этот код устанавливает значение false
в начале и только когда-либо помечает его true
, когда он найден, а затем останавливается… общедоступная функция entity_products_check($arg){ $is_item = «false»;
foreach ($this->entity["products"] as $value){
if($value === $arg){
$is_item = "true";
break;
}
}
return $is_item;
}
Или вы могли бы использовать in_array()
, чтобы проверить, находится ли значение в массиве для вас…
public function entity_products_check($arg){
return in_array($arg, $this->entity["products"])
? "true" : "false";
}
Комментарии:
1. Спасибо. Это смотрело мне в лицо. Спасибо.
2. @VTom, если это решило вашу проблему, пожалуйста, подумайте о том, чтобы отметить, что это соответствует ответу — meta.stackexchange.com/questions/5234 /…