Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка массива на значения
 
 автор: fsn   (03.02.2008 в 14:31)   письмо автору
 
 

Подскажите пожалуйста!
Есть массив:
$a = array($_POST['text1'], $_POST['text2'], $_POST['text3'])
Как проверить массив, чтобы значения, которые пользователь вводит в форму не повторились, чтобы в трех полях не было одинаковых значений.
Заранее благодарен.

   
 
 автор: Trianon   (03.02.2008 в 16:53)   письмо автору
 
   для: fsn   (03.02.2008 в 14:31)
 

if($a[0] == $a[1] || $a[0] == $a[2] || $a[1] == $a[2]) die("..");

   
 
 автор: fsn   (03.02.2008 в 18:56)   письмо автору
 
   для: Trianon   (03.02.2008 в 16:53)
 

Это я для примера привел всего 3 поля, а на самом деле их гораздо больше и что их так все перебирать?

   
 
 автор: dobryy   (03.02.2008 в 18:02)   письмо автору
 
   для: fsn   (03.02.2008 в 14:31)
 

Можно извратится как то так:
<?
// Данные, которые получили с формы
$a = array($_POST['text1'], $_POST['text2'], $_POST['text3'])

$b array_unique($a);

if (
count($a) == count($b)) {
// всё гуд - нету одинаковых
...
} else {
// ноу гуд - есть одинаковых
...
}
?>

   
 
 автор: fsn   (03.02.2008 в 18:54)   письмо автору
 
   для: dobryy   (03.02.2008 в 18:02)
 

Я пробовал на array_unique, но я забыл сказать, что пустые поля допускаются.

   
 
 автор: Dobryy   (03.02.2008 в 19:18)   письмо автору
 
   для: fsn   (03.02.2008 в 18:54)
 

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

<?
// Данные, которые получили с формы
$a = array("a","b","c");

foreach (
$a as $v) {
// берем первый элемент массива, исключая его из него.
    
$elem array_shift($a);
// проверяем или есть ещё такие значения в массиве и не пустое ли оно
    
if (in_array($elem,$a) && $elem != ""){
//есть совпадения
    
} else {
//нет совпадения
    
}
}
?>

   
 
 автор: fsn   (04.02.2008 в 13:26)   письмо автору
 
   для: Dobryy   (03.02.2008 в 19:18)
 

Dobryy ! Большое спасибо.
Вчера долго тестировал, работает.

   
 
 автор: Dobryy   (03.02.2008 в 19:28)   письмо автору
 
   для: fsn   (03.02.2008 в 18:54)
 

Ещё один:
<?
// Данные, которые получили с формы
$a = array(" "," ","c");

foreach (
$a as $k => $v){
    if (
trim($v) == "") {
        unset(
$a[$k]);
    }
}

$b array_unique($a);

if (
count($a) == count($b)) {
// всё гуд - нету одинаковых
echo "Gooood";
} else {
// ноу гуд - есть одинаковых
echo "No goooooood";


?> 

   
 
 автор: olejek   (04.02.2008 в 13:42)   письмо автору
 
   для: Dobryy   (03.02.2008 в 19:28)
 

Не парьтесь!
Есть такая функция array_count_values

$count_array=array_count_values($array);
foreach($count_array as $key=>$value)
    if ($value>1)
        echo $key;    //поле, которое повторяется больше одного раза

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования