2016-10-12 4 views
-1

배열이 $get_list_cate입니다.PHP에서 배열의 두 열을 비교합니까?

그래서이 배열의 두 열 값을 비교하고 싶습니다.

배열 $get_list_cate :

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

그래서,이 배열을 통해 루프 시도 parent_id 모든 값 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 

점점 더 많은 ....

+0

당신이 서로 열이 각 열을 비교 하시겠습니까? 문제가 명확하지 않습니다. –

+0

당신이 무엇을 요구하는지 명확하지 않습니다. 코드는 'parent_id'와 같은 항목의 'id'를 비교하여 작동해야합니다. – apokryfos

+0

Youre는 abour two foreach를 사용하지만 코드에는 하나만 있습니다. 두 가지 foreach 값을 혼동하지 않습니까? –

답변

2

설명 :

  1. 이의 사용 당신은 당신이 $get_list_cate 실제 배열입니다 "배열"이라고 부르는 경우 배열 표기법을 사용한다 연산자는 배열에서 객체를 가져 오는 데 사용되는 ->이라고합니다.
  2. 하지만 통해 루프에 갈 때 배열은 운영자가 데이터를 가져 오거나 당신이 원하는 적으로 무엇을 할 $data['DB COLUMN NAME']라는 사용해야 DB를에서 오는 값.
  3. 여기에서 $data은 루프에 들어오는 변수입니다.

따라서 코드 코드가 필요할 수 있습니다.

단일 어레이의 경우 one foreach()과 비교해야 할 경우.

당신은 당신이 얻을 배열을 위해 Two 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 
    } 
} 
?> 
.

(E.g)IDsecond arrayPARENT_ID을 비교해야합니다. 아래 코드를 사용할 수 있습니다.

<?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 
) 
+0

건배. 감사. – vanloc

+0

내 펜에 내 문제가 나타납니다. http://codepen.io/r0ysy0301/pen/zKoPAE. 탭을 클릭하면 데이터를 업데이트해야합니다. 조사 할 때이 키워드 또는 키워드와 같은 예가 있습니까? 감사. – vanloc

-1

당신은 -> 연산자를 사용은, 느릅 나무 개체에 사용됩니다.

foreach($get_list_cate as $item_cate): 

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

endforeach; 
1

사용 중첩 루프

<?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 
?> 
+0

각 줄에 왜 ''이 표시됩니까? 못 생겼어. –

+0

질문은이 형식입니다. :/ –

+0

PHP 코드를 HTML로 작성합니다. 그래서 PHP 코드를 필터링하여 각 줄에 ''을 제거하지 마십시오. – vanloc

1

귀하의 공급 데이터가 네 부모 아이디의 하나는, 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); 

그런 결과를 통해 단순히 루프가 귀하의 출력을 제공하는

관련 문제