Цикл PHP и условие IF

#php #arrays #loops #if-statement

#php #массивы #циклы #if-оператор

Вопрос:

Привет, у меня есть два массива, и я хочу проверить их, имеют ли они какой-либо элемент, равный (одинаковый) друг с другом, и если они есть, они должны попасть на страницу, если не просто напечатать No .

Я создал этот код, но я не знаю, почему он не работает.

P.S. элементы массивов содержат текст.

 $res = count($title1);

for ($j = 0; $j <= $res; $j  ) {
   if(strtoupper($title2[$j]) == strtoupper($title1[$j]))
    {
        echo 'Yes<br/>';
        echo $title2[$j].'==='.$title1[$j].'<br/';
    }
   else{
        echo 'No<br/>';
    }
}
 

Комментарии:

1. Что вы подразумеваете под «это не работает»? Что вы ожидаете от своего кода и что он на самом деле делает?

2. Можете ли вы предоставить некоторый пример ввода и ожидаемый результат, который вам нужен?

3. Ваш код требует, чтобы они не только имели одинаковое значение, но и имели одинаковый индекс для этого значения. Итак, если у одного есть «Joe» с индексом 0, а у другого «Joe» с индексом 1, они будут считаться не совпадающими. Если это требование, то, похоже, вы все правильно поняли, но если вам нужно проверять каждое значение каждого массива на совпадения, тогда ответы от других должны работать.

Ответ №1:

Вы тоже можете использовать это

 <?php
$count = 0
foreach ($array1 as $value) {
    if(in_array($value , $array2)
    {
        echo 'Yes<br/>';
        echo $value;
        $count = $count   1 ;
    }
}
if($count == 0 )
{
    echo "no" ;
}
?>
 

Комментарии:

1. $cout = $count 1 ; (опечатка) должно читаться как $count = $count 1 ;

Ответ №2:

 foreach ($array1 as $value) {
    if(in_array($value , $array2)
    {
        echo 'Yes<br/>';
        echo $value;
        $count = $count   1 ;
    }
}
 

это правильный ответ 🙂 спасибо @hamidreza

Ответ №3:

Первая проблема заключается в том, что вы используете <= вместо < . Если вы выполняете цикл по количеству массивов и используете <=, он выйдет за границы массива. Если ваш массив содержит 4 элемента, последнее значение массива находится в индексе 3: $arr[3] (четвертая позиция), но вы пытаетесь получить значение $arr[4] на последней итерации, что приведет к ошибке. Вы должны проверить свой error_log.

Попробуйте это:

 $res = count($title1);

for ($j = 0; $j < $res; $j  ) {
    //you need to check to see if $j'th position is available in $title2 array
    if(isset($title2[$j]) amp;amp; strtoupper($title2[$j]) == strtoupper($title1[$j]))
    {
        echo 'Yes<br/>';
        echo $title2[$j].'==='.$title1[$j].'<br/';
    }
    else{
        echo 'No<br/>';
    }
}
 

В качестве альтернативы вы могли бы использовать foreach цикл:

 foreach($title1 as $key => $value) {
    if (isset($title2[$key]) amp;amp; 
        strtoupper($title2[$key]) == strtoupper($title1[$key])) {
        echo 'Yes<br/>';
        echo $title2[$key].'==='.$title1[$key].'<br/';
    }
    else {
        echo 'No<br/>';
    }
}
 

Ответ №4:

Я могу только догадываться, поскольку мы не знаем, что содержат массивы, но я предполагаю, что вы хотите проверить, имеют ли они один и тот же элемент в любом индексе.На данный момент вы только проверяете, имеет ли $title1 тот же элемент, $title2 что и тот же индекс. Итак, если у вас есть два массива

 ['a', 'b'], ['b', 'a']
 

Он проверяет, если 'A' == 'B' , а затем, если 'B' == 'A' .

Что вам нужно сделать, это что-то вроде:

 for ($j = 0; $j < count($title1); $j  ) {
   for ($k = 0; $k < count($title2); $k  ) {
     if(strtoupper($title2[$k]) == strtoupper($title1[$j]))
     {
        echo 'Yes<br/>';
        echo $title2[$j].'==='.$title1[$j].'<br/>';
     }
     else {
        echo 'No<br/>';
     }
   }
}
 

Комментарии:

1. почему вы перебираете оба массива? это O(n^2) . Вы можете просто перебрать первый массив и проверить, установлен ли он в другом массиве. Также ваш код приведет к сообщению об ошибке undefined index на последней итерации. Смотрите мой ответ

2. Я перебираю оба, потому что, как указано в моем ответе, он проверяет, существует ли элемент в любой позиции в другом массиве. <= было просто скопировано при вставке их цикла, не заметил этого, так что спасибо.