2017-05-18 2 views
0

私はSQLデータベースからレコードを取得するこのPHPスクリプトを持っています。後述するように PHPのarray_diif()はSQL出力配列では機能しません

$sql1 = "SELECT TOP 3 id,hipoName FROM t2o_hipo_list"; 
$sql2 = "SELECT TOP 3 id,hipoName FROM hipo_list"; 

$result1 = sqlsrv_query($conn,$sql1); 
$result2 = sqlsrv_query($conn,$sql2); 

$row1=[]; 
$row2=[]; 

while ($rs1 = sqlsrv_fetch_array($result1, SQLSRV_FETCH_ASSOC)) { 

    $row1[] = $rs1; 
} 

while ($rs2 = sqlsrv_fetch_array($result2, SQLSRV_FETCH_ASSOC)) { 

    $row2[] = $rs2; 
} 

print_r($row1); 
print_r($row2); 
上記スクリプトの出力があった

Array 
(
    [0] => Array 
     (
      [id] => 
      [hipoName] => Channa 
     ) 

    [1] => Array 
     (
      [id] => 
      [hipoName] => Chaminda 
     ) 

    [2] => Array 
     (
      [id] => 
      [hipoName] => Niroshana 
     ) 

) 
Array 
(
    [0] => Array 
     (
      [id] => 2531 
      [hipoName] => Chaminda 
     ) 

    [1] => Array 
     (
      [id] => 2532 
      [hipoName] => Niroshana 
     ) 

) 

そして、私は、しかし、

$x = array_diff($row1,$row2); 

$row1$row2変数の配列差を使用エラーが発生しました。

Error: Array to string conversion

以下に示すように、私は

<?php 

    $active = ['a','b','c','d','e']; 
    $current = ['b','c','f','g']; 

    echo 'data 1: '; 
    print_r($active); 
    echo '<br/>'; 
    echo 'data 2: '; 
    print_r($current); 

    echo '<br/><br/>'; 

    $a1 = array_diff($active,$current); 
    $a2 = array_diff($current,$active); 

    echo 'output 1: '; 
    print_r($a1); 
    echo '<br/>'; 
    echo 'outut 2: '; 
    print_r($a2); 

?> 

、簡単なスクリプトと同じ概念を試してみましたが、上記のスクリプトの出力は私が必要なもので、

data 1: Array ([0] => a [1] => b [2] => c [3] => d [4] => e) 
data 2: Array ([0] => b [1] => c [2] => f [3] => g) 

output 1: Array ([0] => a [3] => d [4] => e) 
outut 2: Array ([2] => f [3] => g) 

どのように私はこの出力を達成することができ、ありますこの同じ概念でそれを得ることは可能ですか? manual for array_diff()状態として

+1

がないスパムのタグを行い、これは 'mysql'の問題ではありません、uが唯一の関連タグ –

+0

にタグを付ける必要があります次のようにしてください:** $ x = array_diff($ row1 [0]、$ row1 [1]、$ row1 [2]、$ row2 [0]、$ row2 [1]); ** –

答えて

0

Note: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In other words: when the string representation is the same.

Note: This function only checks one dimension of a n-dimensional array. Of course you can check deeper dimensions by using array_diff($array1[0], $array2[0]);.

だから、あなたが多次元配列の文字列変換エラーに配列を取得することを完全に自然です。所望の結果を達成するために

、カスタム比較関数、ご自身でarray_udiff()を使用する必要があります。

$active = ['a','b','c','d','e']; 
$current = ['b','c','f','g']; 

$compare = function($a, $b) { 
    // The spaceship operator was introduced in PHP 7 
    return $a <=> $b; 
}; 

// Returns: [0 => "a", 3 => "d", 4 => "e"]; 
$a1 = array_udiff($active, $current, $compare); 

// This works on all current PHP versions 
$compare = function($a, $b) { 
    if ($a === $b) { 
     return 0; 
    } 

    return ($a < $b) ? -1 : 1; 
}; 

// Returns: [2 => "f", 3 => "g"]; 
$a2 = array_udiff($current, $active, $compare); 
関連する問題