PHP.mk документација

array_diff_key

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.array-diff-key.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.array-diff-key.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
array_diff_key

Референца за `function.array-diff-key.php` со подобрена типографија и навигација.

function.array-diff-key.php

array_diff_key

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

array_diff_keyComputes the difference of arrays using keys for comparison

= NULL

array_diff_key(array $array, array ...$arrays): array

Ги пресметува разликите на низите користејќи ги клучевите за споредба array Ги споредува клучевите од arrays спрема клучевите од array_diff() и ги враќа разликите. Оваа функција е слична на

Параметри

array

клучовите на низата исто така се користат во споредбата.

arrays

Низата од која треба да се спореди

Вратени вредности

Враќа array што ги содржи сите внесувања од array освен што споредбата се прави на клучевите наместо на вредностите.

Дневник на промени

Верзија = NULL
8.0.0 Оваа функција сега може да се повика само со еден параметар. Поранешно, беа потребни најмалку два параметри.

Примери

Пример #1 array_diff_key() example

Двата клуча од key => value паровите се сметаат за еднакви само ако (string) $key1 === (string) $key2 . Со други зборови, се извршува строга проверка на типот, така што низата на претставување мора да биде иста.

<?php
$array1
= array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'yellow' => 7, 'cyan' => 8);

var_dump(array_diff_key($array1, $array2));
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

array(3) {
  ["blue"]=>
  int(1)
  ["red"]=>
  int(2)
  ["purple"]=>
  int(4)
}
<?php
$array1
= array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'yellow' => 7, 'cyan' => 8);
$array3 = array('blue' => 6, 'yellow' => 7, 'mauve' => 8);

var_dump(array_diff_key($array1, $array2, $array3));
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

array(2) {
  ["red"]=>
  int(2)
  ["purple"]=>
  int(4)
}

Белешки

Забелешка:

Оваа функција проверува само една димензија на n-димензионална низа. Се разбира, можете да проверите подлабоки димензии со користење на array_diff_key($array1[0], $array2[0]);.

Види Исто така

  • array_diff() - Ги пресметува разликите на низите
  • array_udiff() - Ги пресметува разликите на низите со користење на функција за повикување за споредба на податоци
  • array_diff_assoc() - Ги пресметува разликите на низите со дополнителна проверка на индекс
  • array_diff_uassoc() - Ги пресметува разликите на низите со дополнителна проверка на индекс што се изведува од страна на корисникот обезбедена функција за повикување
  • array_udiff_assoc() - Ги пресметува разликите на низите со дополнителна проверка на индекс, ги споредува податоците со функција за повикување
  • array_udiff_uassoc() - Ги пресметува разликите на низите со дополнителна проверка на индекс, ги споредува податоците и индексите со функција за повикување
  • array_diff_ukey() чии клучеви отсуствуваат од сите други низи.
  • array_intersect() - Пресметува разлика на низи користејќи callback функција на клучевите за споредба
  • array_intersect_assoc() - Пресметува пресек на низи
  • array_intersect_uassoc() - Пресметува пресек на низи со дополнителна проверка на индекс
  • array_intersect_key() - Ги пресметува разликите на низите користејќи функција за повикување на клучевите за споредба
  • array_intersect_ukey() - Пресметува пресек на низи со дополнителна проверка на индекс, ги споредува индексите со callback функција

Белешки од корисници 10 белешки

- Ги пресметува пресеците на низите користејќи ги клучевите за споредба
пред 17 години
To return the unique elements (those with a key that exists only once in either array but not in both) try:
function array_unique_diff ($array1, $array2)
{
  array_merge(array_diff_key($array1, $array2), array_diff_key($array2, $array1));
}

Example:
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

  array_diff_key($array1, $array2)

returns

  array ( 'red' => 2, 'purple' => 4 ) 

  array_diff_key($array2, $array1)

returns

  array ( 'yellow' => 7, 'cyan' => 8, )

  array_unique_diff($array1, $array2);
  
returns

  array ( 'red' => 2, 'purple' => 4, 'yellow' => 7, 'cyan' => 8, )
gk на anuary dot com
12 години пред
Improved recursive version.

<?php
/**
 * @author Gajus Kuizinas <[email protected]>
 * @version 1.0.0 (2013 03 19)
 */
function array_diff_key_recursive (array $arr1, array $arr2) {
    $diff = array_diff_key($arr1, $arr2);
    $intersect = array_intersect_key($arr1, $arr2);
    
    foreach ($intersect as $k => $v) {
        if (is_array($arr1[$k]) && is_array($arr2[$k])) {
            $d = array_diff_key_recursive($arr1[$k], $arr2[$k]);
            
            if ($d) {
                $diff[$k] = $d;
            }
        }
    }
    
    return $diff;
}
?>

An up to date version is maintained at https://github.com/gajus/flow/blob/master/flow.inc.php#L337.
Ashton
пред 18 години
I needed something a little different where maybe even the keys in multidimensional arrays don't match up. Setting $assoc to false will cause only to check for missing keys, otherwise it compares values as well. This was also based on '2ge at 2ge dot us' function

<?php

function n_array_diff_assoc ($a1, $a2, $assoc=true) {
    $r = array();
    if(is_array(current($a1))):
        foreach($a1 as $k => $v):
            if(isset($a2[$k])):
                $diff = n_array_diff($a1[$k], $a2[$k], $assoc);
                if (!empty($diff)):
                    $r[$k] = $diff;
                endif;
            else:
                $r[$k] = $v;
            endif;
        endforeach;
    else:
        $r = $assoc ? array_diff_assoc($a1, $a2) : array_diff_key($a1, $a2);
    endif;
    return $r;
}
?>
sjungwirth at matrix-consultants dot com
20 години пред
Seems to be a great function, especially for n-dimensions arrays. The only problem is that I cannot find it in php 5.0.3 and 5.0.4. Does it really exist ?! :(

[20:27:05][maxence@conurb] ~/test2/php-5.0.4$ grep PHP_FUNCTION * -r | grep -i array_diff_key 
[20:27:09][maxence@conurb] ~/test2/php-5.0.4$
maxence at pontapreta dot net
пред 18 години
The recursive function suggested by '2ge at 2ge dot us' will provide you with empty arrays if there's no diff. 
This variant of the function cleans up empty arrays and fixes a bug in the first suggested version. It works 100%
.
<?php
function array_diff_key_recursive ($a1, $a2) {
        foreach($a1 as $k => $v) {
            //$r[$k] = is_array($v) ? $this->array_diff_key_recursive($a1[$k], $a2[$k]) : array_diff_key($a1, $a2);
        if (is_array($v))
            {
            $r[$k]=$this->array_diff_key_recursive($a1[$k], $a2[$k]);
            }else
            {
            $r=array_diff_key($a1, $a2);
            }

        if (is_array($r[$k]) && count($r[$k])==0)
            {
            unset($r[$k]);
            }
        }
        return $r;
    }
?>
AiFiLTr0 [at host] invyl [dot] ath.cx
пред 18 години
The PHP4 version below works only unidirectionally. If you switch the arrays around i.e. (ar2, ar1) you get different results than (ar1, ar2).
coder at gs dot com
пред 11 години
Here's a simple function that returns true if all keys in the first array are found in the second array, and false if they aren't.

function same_keys ($a1, $a2) {
    $same = false;
    if (!array_diff_key($a1, $a2)) {
        $same = true;
        foreach ($a1 as $k => $v) {
            if (is_array($v) && !same_keys($v, $a2[$k])) {
                $same = false;
                break;
            }
        }
    }
    return $same;
}

To check if two arrays have the same structure, ignoring values, execute the function twice, the second time with the arguments reversed.
rhallsey at yahoo dot com
20 години пред
Well, you could implement in the code something more powerfull: 

http://www.php.net/manual/en/function.array-diff.php#31364
ampf at egp dot up dot pt
пред 17 години
you can use this function for return the difference of two array !

<?php
function array_unique_diff_key ($array1, $array2)
{
  if (is_array($array1) && is_array($array2))
    return array_diff_key($array1, $array2) + array_diff_key($array2, $array1);
  else if (is_array($array1)) return $array1;
  else if (is_array($array2)) return $array2;
  else return array();
}
?>
division-par-zero at zilon dot net
20 години пред
One more alternative variant :)
<?
if (!function_exists('array_diff_key')) {
    function array_diff_key() {
        $argCount   = func_num_args();
        $diff_arg_prefix = 'diffArg';
        $diff_arg_names = array();
        for ($i=0; $i < $argCount; $i++) {
            $diff_arg_names[$i] = 'diffArg'.$i;
            $$diff_arg_names[$i] = array_keys((array)func_get_arg($i));
        }
        $diffArrString = '';
        if (!empty($diff_arg_names)) $diffArrString =  '$'.implode(', $', $diff_arg_names);
        eval("\$result = array_diff(".$diffArrString.");");
        return $result;
    }
}
?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.