2014-11-26 4 views
0

에 의해 PHP에서 두 배열을 비교 나는 큰 문제가 나는 방법이 개발하는 아무 생각이 : 그래서 나는 테이블이 있습니다

Array(
[0] => Array 
    (
     [0] => Array 
      (
       [host] => test1 
      ) 

    ) 

[1] => Array 
    (
     [0] => Array 
      (
       [host] => test2 
      ) 

    ) 

) 
) 

그리고 두 번째 테이블을

Array 
(
    [0] => test1 
    [1] => ghfhfghfg 
) 

이제이 테이블을 비교하고 retourne $ nCount = 1 beacause 두 번째 호스트가 첫 번째 및 두 번째 테이블과 같음을 확인합니다.

+0

2 개의 호스트가 동일하기 때문에'$ nCount = 1'을 반환하는 것은 의미가 없습니까? '$ nCount = 2'를 돌려 주면 안 될까요? – Xatenev

+0

내가 편집 한 질문, 미안 해요. –

답변

0

먼저 무엇이 당신의 의견인지 알아야합니다. 귀하의 경우 나는 당신이 항상 같은 유형의 멀티 컬럼 "테이블"(당신이 그것을 부르는 것처럼)을 가질 것이라고 생각했습니다.

이 경우에는 다중 열 배열을 두 번째 배열과 같은 플랫 배열로 병합하는 다음과 같은 것을 사용할 수 있습니다.

<?php 
$multi_col = array(
    array(
     array(
      'host'=>'test1' 
     ) 
    ), 
    array(
     array(
      'host'=>'test2' 
     ) 
    ) 
); 

$single_col = array('test1', 'sfsd'); 
$single_cold_multicol = array_map(function(Array $item){ 
    return $item[0]['host']; 
}, $multi_col); 

$diff_compare = array_diff($single_col, $single_cold_multicol); 
$nCount = count($single_col) - count($diff_compare); 

경우 개봉 $multi_col 항상 같은 깊이가없는, 재귀 평평해야합니다. 항상 같은 깊이 (배열을 작성하는 방법을 항상 알고 있음)라면 위 코드를 사용할 수 있습니다.

1

은 당신이 뭔가를 할 수 있습니다 : 나는 그것을 도울 수 있다면 배열 인덱스를 하드 코딩하지 않도록하는 경향이

count(array_intersect(array_map(function($a) { return $a[0]['host']; }, $array1), $array2)); 
0

.

첫 번째 배열 구조가 항상 같습니까?

내가 예를 들어, 첫 번째 배열을 평평하게 할 함수 작성합니다

function flatten($arr, &$acc=array()) { 
     if (empty($arr)) { 
      return $acc; 
     } 
     $e = array_pop($arr); 
     if (is_array($e)) { 
      flatten($e, $acc); 
     } else { 
      $acc[] = $e; 
     } 
     return flatten($arr, $acc); 
    } 

이 첫 번째 배열의보다 일반적인 경우에 작동 할 방법을 평평하게한다. 통화는과 같이 뭔가 될 것이다 :

$ar = array(
     array(
      'test1', 
     ), 
     array(
      'test2', 
     ), 
    ); 

    $ar2 = array(
     'test1', 
     'ghfhfghfg', 
    ); 

    $same = array_intersect(flatten($ar), $ar2); 
    var_dump($same); 

당신은 flatten 기능에 대한 더 많은 검사를 추가 할 수 있습니다.