Я делаю это нелегко - что правильно? И почему это отражается ЧЕТЫРЕ раза?

1

Короче говоря, я выполняю задание, и у меня есть файл cookie, который у меня заполнен введенными пользователем данными из отдельных полей. Я пытаюсь захватить информацию из файла cookie, и, если, скажем, например, они выбирают вариант A во всех восьми раскрывающихся списках, он будет отгонять предложение. Если нет, это просто ничего не значит. Здесь мой код, о котором идет речь:

foreach ($savedCardArray as $key => $val) {
if ($val === 'over2000') {
    foreach ($savedCardArray as $key => $val) {
        if ($val ==='always') {
            foreach ($savedCardArray as $key => $val) {
                if ($val ==='publicTransport') {
                    foreach ($savedCardArray as $key => $val) {
                        if ($val ==='public') {
                            foreach ($savedCardArray as $key => $val) {
                                if ($val ==='photoEditing') {
                                    foreach ($savedCardArray as $key => $val) {
                                        if ($val ==='notSureSize') {
                                            foreach ($savedCardArray as $key => $val) {
                                                if ($val ==='notSureType') {
                                                    foreach ($savedCardArray as $key => $val) {
                                                        if ($val ==='always') {
                                                            echo 'We recommend the Lenovo Thinkpad!<br>';
}}}}}}}}}}}}}}}}    

Итак, есть ли более простой способ написать это? и почему он повторяет ответ четыре раза?

Здесь содержимое массива:

Array
(
    [price] => over2000
    [time] => always
    [where] => publicTransport
    [people] => public
    [for] => photoEditing
    [size] => notSureSize
    [type] => notSureType
    [Brand] => always
)
  • 1
    Почему вы проходите через один и тот же массив? Что вы пытаетесь сделать с этим?
  • 0
    Позволив нам увидеть содержимое массива, будет легче ответить. Попробуйте эту строку кода и дайте ответ, снимите квадратные скобки. [echo "<pre>"; print_r ($ savedCardArray); echo "<pre>"]. Кроме того, поскольку каждый цикл использует одинаковые имена переменных [$ key, $ value], они будут перезаписывать друг друга. Когда он выходит из цикла, чтобы войти в родительский цикл, значение ключа будет пропущено до места завершения внутреннего цикла.
Теги:
cookies
foreach

4 ответа

0

Сохранение с помощью цикла, чтобы вы могли расширить его, если вам нужно изменить любые значения;

$checkArray = array('over2000', 'always', 'publicTransport', 'public', 'photoEditing', 'notSureType', 'always');
$checkFlag = 0;

foreach  ($savedCardArray as $key => $val) {
    if (!in_array($val, $checkArray)) { $checkFlag = 1; }
}

if ($checkFlag == 0) { echo 'We recommend the Lenovo Thinkpad!<br>'; }

Любые дополнительные значения для проверки должны быть добавлены в checkArray.

0

Быстро и грязно, если это все, что вам нужно:

$checkArray = array('over2000', 'always', 'publicTransport', 'public', 'photoEditing', 'notSureType', 'always');
if($checkArray == array_values($savedCardArray)){
    echo 'We recommend the Lenovo Thinkpad!<br>'; 
}
0

Это самый безопасный способ сделать это. Потому что в вашем примере вы не делаете матч против ключа. Таким образом, $data['Brand'] и $data['time'] вернут true для 'always'.

if(
    $data['price'] == 'over2000' && 
    $data['time'] == 'always' && 
    $data['where'] == 'publicTransport' && 
    $data['people'] == 'public' &&
    $data['for'] == 'photoEditing' &&
    $data['size'] == 'notSureSize' &&
    $data['type'] == 'notSureType' &&
    $data['Brand'] == 'always'
) {
    echo 'We recommend the Lenovo Thinkpad!<br>';
}

Учитывая, что $data содержат ваши данные cookie.

  • 0
    Это сделал это! Я ОЧЕНЬ новичок в PHP, и я знаю, как ужасен мой вопрос, поэтому я ценю вашу помощь! Спасибо!
0
$savedCardArray = array("price"=>"over2000","time"=>"always","where"=>"publicTransport","people"=>"public","for"=>"photoEditing","size"=>"notSureSize","type"=>"notSureType","Brand"=>"always");
$vals = array("over2000","always","publicTransport"/*... and so on */);
$found =0;
foreach($vals as $neededVal){
    if(in_array($neededVal,array_values($savedCardArray)))
    {
        $found++;    
    }
}
if($found==count($vals))
    echo 'We recommend the Lenovo Thinkpad!<br>'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню