2015-05-22 4 views
-3

Хотя я довольно опытен с PHP, я недавно встречался с этой проблемой, которая сводила меня с ума.
PHP - in_array не работает должным образом

<?PHP 
// This code is just basic example 
$we_need = array(
    'Carrot', 
    'Onion', 
    'Milk', 
    'Onion', 
    'Potato' 
); // Notice that Onion is on two places 
$basket = array(); // An empty basket 
foreach ($we_need as $product) { 
    // Add product to basket ONLY if it's not already there 
    if (!in_array($product, $basket)) { 
     $basket[] = $product; 
    } else { 
     echo "For debugging: Duplicate detected, so skipped.\n"; 
    } 
} 
print_r($basket); 
?> 

Что не так с этим кодом? Почему массив $ basket имеет дубликаты в конце?
В моей реальной программе $ we_need извлекается из базы данных, но это не многомерный массив, а новые строки в значениях.
Я знаю, что я могу использовать array_unique() для этого подхода, но я хочу знать, где проблема?

+0

Theres а} отсутствует для цикла Еогеасп – oBo

+0

'in_array()' или 'is_array()'? –

+1

Так что, опытный опыт с PHP_, да? !! – someOne

ответ

0

Отсутствует закрывающая скоба.

foreach ($we_need as $product) { 

    // Add product to basket ONLY if it's not already there 
    if (!in_array($product, $basket)) { 
     $basket[] = $product; 
    } else { 
     echo "For debugging: Duplicate detected, so skipped.\n"; 
    } // <<<------- here 
} 

Тогда вы получите:

For debugging: Duplicate detected, so skipped. 
Array ([0] => Carrot [1] => Onion [2] => Milk [3] => Potato) 
+0

Это был бы ответ, если в моем исходном коде отсутствует пропущенная скобка. – xZero

+1

Благодарим вас за тестирование. Кажется, что код работает для всех, кроме меня, поэтому я заключаю, что проблемы должны заключаться в установке PHP на моем сервере. Ваш ответ не устраняет проблему, и у нее ее нет, но она поможет другим увидеть рабочую версию кода и мой комментарий, если ничего не поможет. – xZero

Смежные вопросы