Сравнить два столбца массива в PHP?

#php #arrays

#php #массивы

Вопрос:

У меня есть массив $get_list_cate .

Итак, я хочу сравнить значения двух столбцов в этом массиве.

Массив $get_list_cate :

 ID..................PARENT_ID.....................NAME
0                   5                             Ashe
1                   3                             Garen
2                   0                             Yasuo
4                   1                             Miss Fortune
5                   2                             Veikor
  

Итак, я попытался перебрать этот массив и попытался сравнить все значения id со всеми значениями parent_id . Вот мой код:

 <?php foreach($get_list_cate as $item_cate):

    if($item_cate->parent_id == $item_cate->id ) :
          // some code
    endif

endforeach
?>
  

Но это будет похоже на это:

 Only 5 is values of `parent_id`     :      - compare to -      :       all values in `id`.


5  ---- 0
   ---- 1
   ---- 2
   ---- 4
   ---- 5    -> correct.
  

Остановитесь здесь. Не два foreach .

Это должно продолжаться с:

 3 ----- 0
   ---- 1
   ---- 2
   ---- 4
   ---- 5
  

=> недоступно в этом массиве.

 0 ----- 0    -> correct.
   ---- 1
   ---- 2
   ---- 4
   ---- 5
  

Все больше и больше….

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

1. Вы хотите сравнить каждый столбец друг с другом? Ваша проблема не ясна.

2. Непонятно, о чем вы спрашиваете. Ваш код должен работать при сравнении parent_id с id тем же элементом.

3. Вы говорите о двух foreach, но в вашем коде есть только один. Вы не путаете два значения foreach ?

4. @user987456321. Сначала foreach только перебирает все значения в $get_list_cate . Нет включения, когда я пытался сравнить id с. parent_id

5. У вас есть two foreach , и вы должны сравнивать каждое значение первого массива с каждым значением второго массива правильно 🙂 Мне понятна концепция

Ответ №1:

Пояснения:

  1. Вызывается использование этого оператора -> , который используется для получения объектов из массива.
  2. Но когда вы собираетесь перебирать значения массива, которые поступают из базы данных, вы должны использовать вызываемый оператор $data['DB COLUMN NAME'] для извлечения данных или делать что угодно по своему усмотрению.
  3. Где $data находится переменная, которая входит в цикл.

Следовательно, это может быть код, который вам нужно использовать.

Если вам нужно сравнить с one foreach() для одного массива, который вы получите.

 <?php 
foreach($get_list_cate as $single_item)
{
   if($single_item['id'] == $single_item['parent_id'])
    {
        // You can handle upon the condition if TRUE
    }
    else
    {
        // You can handle the FALSE Request over here
    }
}
?>
  

Если вам нужно сравнить с Two foreach() для массива, который вы получаете.

(Например) Вам нужно сравнить ID из first array и PARENT_ID из second array вы можете использовать приведенный ниже код.

 <?php 
foreach($get_list_cate as $key1=>$single_item)
{
    foreach ($single_item as $key2 => $single_value) 
    {
            if($key2==$key1)    
            {
                if($single_value['parent_id'] == $single_item['id'])
                {
                    // You can handle upon the condition if TRUE
                }
                else
                {
                // You can handle the FALSE Request over here
                }           
            }
    }
}
?>
  

Альтернативное решение:

Если у вас есть два массива, а именно $array1 , и $array2 вы можете выполнить array_diff() , чтобы извлечь нечетный один. Он извлекает различное значение из массива, если вы используете array_diff() функцию.

Код:

 <?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
?>
  

Вывод:

 Array
(
    [1] => blue
)
  

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

1. Моя проблема появляется у меня под рукой. codepen.io/r0ysy0301/pen/zKoPAE . Необходимо обновлять данные при нажатии на вкладку. Есть ли у вас какой-нибудь пример, подобный этому, или ключевое слово для исследования? Спасибо.

Ответ №2:

Использовать вложенный цикл

 <?php 
  foreach($get_list_cate as $item_cate1):
      foreach($get_list_cate as $item_cate2):
          echo $item_cate1->parent_id . '----' . $item_cate2->id;
          if($item_cate1->parent_id == $item_cate2->id ):
              // some code
              echo "-> correct";
          endif
          echo "<br>";
      endforeach
  endforeach 
?>
  

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

1. Почему <?php ?> для каждой строки? Это некрасиво.

2. Я пишу PHP-код с помощью HTML. Итак, я фильтрую PHP-код, не удаляя <?php ?> его в каждой строке.

Ответ №3:

Предоставленные вами данные предполагают, что в столбце id отображаются четыре родительских идентификатора, а не один. т.Е. 0, 1, 2 и 5. Вы можете использовать функцию array_intersect в сочетании с функцией array_column, чтобы найти их.

 $parent = array_column($get_list_cate,'PARENT_ID');
$ids = array_column($get_list_cate, 'ID');

$intersect = array_intersect($parent, $ids);
  

Затем просто просмотрите результаты, чтобы представить свой вывод

Ответ №4:

Вы используете -> оператор, который используется для объектов. Вы должны использовать обозначение массива, если то, что вы назвали «массивом» $get_list_cate , является реальным массивом :

 foreach($get_list_cate as $item_cate):

    if($item_cate['parent_id'] == $item_cate['id']) :
      // some code
    endif;

endforeach;