#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:
Пояснения:
- Вызывается использование этого оператора
->
, который используется для получения объектов из массива. - Но когда вы собираетесь перебирать значения массива, которые поступают из базы данных, вы должны использовать вызываемый оператор
$data['DB COLUMN NAME']
для извлечения данных или делать что угодно по своему усмотрению. - Где
$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;