2015-07-09 2 views
1

У меня есть эта форма ввода:Почему array_diff действует по-разному, когда массив из входной формы?

<form method="POST" action="unique_value_processor.php"> 
<textarea cols="50" rows="8" name="usedurls"></textarea> 
<textarea cols="50" rows="8" name="freshurls"></textarea> 
<textarea cols="50" rows="8" name="filteredurls"></textarea> 
<input type="SUBMIT" value="SUBMIT"> 

Файлы, обрабатывает форма

$old_urls_exploded = explode("\n", $_POST['usedurls']); 
$new_urls_exploded = explode("\n", $_POST['freshurls']); 
$arraydiff = array_diff($new_urls_exploded, $old_urls_exploded); 
print_r($arraydiff); 

Так что, когда я введите следующее в форму:

поле 1 (old_urls_exploded):

синий, желтый

коробка 2 (new_urls_exploded):

желтый, синий, банан

тогда он должен вернуть только:

банан

Но array_diff возвращается :

желтый, банан

Затем, когда вы вручную ввести массив как:

$old_urls_exploded = array('blue','yellow'); 
$new_urls_exploded = array('yellow','blue','banana'); 

тогда array_diff только возвращает:

банан

как это должен ...

Почему форма влияет на поведение array_diff? Я делаю что-то неправильно?

+4

это сделать ли трюк: '$ arraydiff = array_diff (array_map ("подрезать", $ new_urls_exploded), array_map ("подрезать", $ old_urls_exploded))'? – Rizier123

+0

В вашем втором примере, как он возвращает банан, когда банан не находится ни в одном массиве? ;) Rizier123 - обрезка входов. Это означает, что он думает, что у вас могут быть пробелы в конце каждой строки в ваших текстовых сообщениях, что делает их сравнительно разными. – crush

+0

Rizier123 Да, это решило, спасибо вам большое! –

ответ

2

Как уже упоминалось, @ Rizier123 проблема заключалась в добавлении белых пространств при вводе формы.

Так была решена с помощью:

$ arraydiff = array_diff (array_map ("подрезать", $ new_urls_exploded), array_map ("подрезать", $ old_urls_exploded));

Спасибо

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

  • Нет связанных вопросов^_^