PHP: сравнение трех элементов - PullRequest
3 голосов
/ 09 июня 2010

У меня на главной странице есть три панели с описанием продуктов, и я пишу для них страницу CMS. Я пытаюсь проверить предметы.

Они выбираются через три элемента <select>, featured1, featured2 и featured3. По умолчанию <option value="0" selected>Select an element</option>

Мне нужно проверить $_POST, чтобы убедиться, что пользователь не выбрал один и тот же продукт для нескольких панелей.

Я выяснил, что каждый $_POST должен быть $_POST['featuredN'] > 0, но я не могу найти логический способ обработки 7 потенциальных результатов. Использование логической таблицы, где 1 - это заданное значение.

1  2  3
-------
0  0  0
1  1  1
1  0  0
0  1  0
0  0  1
1  1  0
0  1  1

Если элемент равен 0, я не буду его обновлять, но я хочу, чтобы пользователь мог обновить один элемент, если это необходимо.

Я не могу найти логический способ узнать, не является ли элемент 0, а затем сравнить его с другим элементом, если он также не равен 0.

Пока мой коллега предложил сложить значения. Который работает, чтобы увидеть, если условие 1 0 0 0 не выполняется.

У меня смутное ощущение, что какая-то форма рекурсивной функции может быть в порядке, но я не могу заставить свой мозг помочь мне в этом! Так что коллективный мозг! :)

Ответы [ 3 ]

1 голос
/ 09 июня 2010

Почему бы не использовать несколько простых if?

if($_POST['featured1'] != 0 && $_POST['featured1'] != $_POST['featured2'] && $_POST['featured1'] != $_POST['featured3']) {
    // do something with featured1
}
if($_POST['featured2'] != 0 && $_POST['featured2'] != $_POST['featured1'] && $_POST['featured2'] != $_POST['featured3']) {
    // do something with featured2
}
if($_POST['featured3'] != 0 && $_POST['featured3'] != $_POST['featured1'] && $_POST['featured3'] != $_POST['featured2']) {
    // do something with featured3
}
0 голосов
/ 09 июня 2010

Если вы хотите, чтобы в вашем массиве были уникальные элементы (для каждого элемента со значением выше 0), вы можете сделать следующее.

$selects = array(rand(0,2),rand(0,2),rand(0,2));

echo implode(",",$selects) . "\n";

function removeUnSelected($var) { return $var != 0; }
$selects = array_filter($selects,"removeUnSelected");

echo implode(",",$selects) . "\n";

if($selects == array_unique($selects))
{
    echo "true";
}
0 голосов
/ 09 июня 2010

Вы можете попробовать что-то вроде этого:

function getFeaturedProducts() {
  $featuredProducts = array();
  foreach (array('featured1', 'featured2', 'featured3') as $key) {
    $value = intval($_POST[$key]);
    if (in_array($value, $featuredProducts)) {
      // throw validation error!
      return false;
    }
    if ($value) $featuredProducts[$key] = $value;
  }
  return $featuredProducts;
}

$products = getFeaturedProducts();
if ($products === false) {
  echo "You can't select the same product twice!";
} else {
  // $products will have the same keys as $_POST, but will only contain ones 
  // we want to update, i.e. if feature1 was 0, it will not be present at this point
  foreach ($products as $key => $value) {
    // sample update
    mysql_query("UPDATE featured SET product_id=$value WHERE key=$key");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...