簡體   English   中英

檢查具有不同鍵的數組?

[英]Check Arrays with different keys?

如何檢查特定的陣列鍵是否存在以及如何比較它們?

1.數組看起來像這樣。

[33] => Array
               (
                   [211] =>objectr
                       (
                           [name] => Test
                           [id]=>  211
                    )
               )

[23] => Array
               (
                   [311] =>objectr
                       (
                           [name] => Tester
                           [id]=>  311
                    )
               )

2.數組看起來像這樣

   [0] => 311
   [1] => 211
   [2] => 99

現在,我需要比較它們並獲取它們的ID。

我正在尋找的是這樣的東西

   [0] => Tester
   [1] => Test

我怎么做?

我將對數組1進行轉換,就像刪除外鍵一樣(至少是暫時地),然后在遍歷數組2的過程中,將使用array_key_exists與經過轉換的數組1進行比較。

array_key_exists - http://php.net/manual/zh/function.array-key-exists.php

foreach($first_array as $arr) {
    foreach($second_array as $key=>$val)
    {
        if (array_key_exists($val, $first_array)) {
            $final_array[$key] = $arr['name'];
        }
    }
}

array_search - http: array_search

foreach($first_array as $arr) {
    foreach($second_array as $val)
    {
        $key = array_search($val, $arr);
        if($key !== false) $final_array[$key] = $arr['name'];
    }
}

在兩種情況下,您都應該得到:

   [0] => Tester
   [1] => Test

希望我能理解您的問題,可能會有語言障礙,但是我們開始:

因此,基本上,您有3個數組,並且要使用后一個數組來檢查第一個數組,以查看第一個數組中是否存在這些值/鍵? 首先,您要做的是將第一個數組重新構造為可以輕松轉換以檢查下兩個數組的值和鍵的內容。 因此,讓我們調用第一個數組$ mapArray:

foreach($mapArray as $mapObject){
    foreach($mapObject as $object){
        $mapList[$object->id] = $object->name;
    }
}

現在,這應該給我們類似的東西:

[211] => 'test'
[311] => 'tester'

現在,讓我們調用第二個數組$ arrayIds和第三個$ arrayNames。 要查看id是否存在並在給定數組$ arrayIds時獲取其名稱,您需要做的是:

//given [0] => 311
$keyExists = array_key_exists(311, $mapList); //returns true is the key exists
echo $mapList[311]; //returns tester, the name for the id given

反過來:

//given [0] => 'test'
$nameExists = in_array('test', $mapList);
if($nameExists) echo array_search('test', $mapList); // returns 211

希望這就是您要尋找的東西,或者至少可以幫助您找到想要的東西。

另一種方法:我們將第一個數組縮小為一個維:

$first = array();

foreach($first_array as $val) {
   $first[key($val)] = current($val);
}

給出:

Array
(
    [211] => Array
        (
            [name] => Test
            [id] => 211
        )

    [311] => Array
        (
            [name] => Tester
            [id] => 311
        )

)

(我使用數組而不是對象,但是它的作用相同)。

然后我們計算關鍵點的交集:

//assume
$second_array = array(311, 99);

$result = array_intersect_key($first, array_flip($second_array));

這使:

Array
(
    [311] => Array
        (
            [name] => Tester
            [id] => 311
        )

)

因此,這並不是您想要的,但是您可以通過$element->name輕松訪問name屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM