2017-05-18 5 views
0

J'ai ce script PHP qui récupère les enregistrements d'une base de données SQL.PHP array_diif() ne fonctionne pas pour les tableaux de sortie 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); 

La sortie du script ci-dessus était,

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 
     ) 

) 

Puis, je la différence de tableau sur les variables $row1 et $row2, comme mentionné ci-dessous,

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

Cependant, un erreur générée en disant,

Error: Array to string conversion

J'ai essayé le même concept avec un simple script comme indiqué ci-dessous,

<?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); 

?> 

et la sortie pour le script ci-dessus est ce que je dois,

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) 

Comment puis-je obtenir ce résultat, est -il possible de l'obtenir dans ce même concept?

+1

font pas les balises de spam, ce n'est pas un problème 'de mysql', u ne devrait étiquette balises pertinentes –

+0

Essayez comme ** $ x = array_diff ($ row1 [0], $ row1 [1], $ row1 [2], $ row2 [0], $ row2 [1]); ** –

Répondre

0

Comme les manual for array_diff() états:

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]);.

Il est tout à fait naturel que vous obtenez un tableau à la conversion de chaîne erreur pour les tableaux multidimensionnels.

Pour obtenir le résultat souhaité, vous devez utiliser array_udiff() avec votre propre, la fonction de comparaison personnalisée:

$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);