Nasıl iki dizide değerleri karşılaştırabilirsiniz?

4 Cevap php

Ben (array_diff(), array_intersect(), vb) dizileri karşılaştırmak için yaklaşık okumak her PHP işlevi existence dizi elemanları için karşılaştırır gibi görünüyor.

Aynı yapıya sahip iki boyutlu diziler göz önüne alındığında, nasıl farklılıklar listelemek istiyorum values?

Example

Array 1

[User1] => Array ([public] => 1
                [private] => 1
                [secret] => 1
               ) 
[User2] => Array ([public] => 1
                [private] => 0
                [secret] => 0
               )

Array 2

[User1] => Array ([public] => 1
                [private] => 0
                [secret] => 1
               ) 
[User2] => Array ([public] => 1
                [private] => 0
                [secret] => 0
               )

Difference

[User1] => Array ([public] => 1
                [private] => 0 //this value is different
                [secret] => 1
               )

Yani benim bir sonuç olurdu - "bütün kullanıcılar ki, Kullanıcı1 değişti, ve fark özel 1 yerine 0 olmasıdır."

4 Cevap

Bir yolu buna benzer bir şey yapmak için bir fonksiyon yazmak için ..

function compareArray ($array1, $array2)
{
  foreach ($array1 as $key => $value)
  {
    if ($array2[$key] != $value)
    {
      return false;
    }
  }

  return true;
}

Kolayca iki farklılıkların bir dizi dönmek için bu işlevi artırmak olabilir ..

Düzenle - Burada daha yakından aradığınız ne benzer bir rafine versiyonu bulunuyor:

function compareArray ($array1, $array2)
{
  var $differences;

  foreach ($array1 as $key => $value)
  {
    if ($array2[$key] != $value)
    {
      $differences[$key][1] = $value;
      $differences[$key][2] = $array2[$key];
    }
  }

  if (sizeof($differences) > 0)
  {
    return $differences;
  }
  else
  { 
    return true;
  }
}

Bu sizin için ne arıyorsanız yapar düşünüyorum.

Ile array_diff_assoc kullanıcılara her zaman kullanarak, sonra, örnek verileri kullanarak dış diziler üzerinde bir döngü yapıyor. (Not: Bu bir fark varken, array_diff_assoc bunu yapmak gibi görünüyor geçirilen ikinci diziden, değerini döndürür varsayar).

<?php
$user1 = array("public" => 1, "private" => 1, "secret" => 1);
$user2 = array("public" => 1, "private" =>1, "secret" => 1);
$array1 = array ("user 1"=>$user1, "user 2"=>$user2);

$user1 = array("public" => 1, "private" => 0, "secret" => 1);
$user2 = array("public" => 1, "private" => 1, "secret" => 1);
$array2 = array("user 1"=>$user1, "user 2"=>$user2);

$results = array();  
foreach ( $array1 as $user => $value )
{
    $diff = array_diff_assoc( $array1[$user], $array2[$user] );
    if ($diff) {
    	array_push($results,array($user=>$diff));	
    	}
}


print_r($results);


?>

Bu döndürür:

Array
(
    [0] => Array
        (
            [user 1] => Array
                (
                    [private] => 1
                )
        )    
)

Bu fonksiyonu deneyin:

function arrayDiff($array1, $array2)
{
    if (!is_array($array1) || !is_array($array2)) {
        return false;
    }
    foreach ($array1 as $key => $val) {
        if (array_key_exists($key, $array2) && gettype($val) != "array" && $val === $array2[$key]) {
            unset($array1[$key]);
            continue;
        }
        if (is_array($val)) {
            $val = diff($val, $array2[$key]);
            if ($val !== false) {
                $array1[$key] = $val;
            }
        }
    }
    return $array1;
}

$array1 = array(
    array(
        array('foo', 'bar', 'baz'),
        0
    )
);
$array2 = array(
    array(
        array('foo', 'bar')
    )
);
var_dump(diff($array1, $array2));

Eğer değerlerindeki farklılıkların arıyorsanız, nasıl array_diff_assoc. php manual bu ve şu örneği veriyor "diğer dizilerin hiçbirinde mevcut olmayan tüm dizi1 values içeren bir dizi döndürür" diyor:

In this example you see the "a" => "green" pair is present in both arrays and thus it is not in the ouput from the function. Unlike this, the pair 0 => "red" is in the ouput because in the second argument "red" has key which is 1

<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

Bu sizin için ne arıyorsanız?