2010-07-05 60 views
1

如何检查特定数组键是否存在以及如何比较它们?用不同的键检查数组?

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 

我该怎么做呢?

+0

它只是一个普通的数组,或者你也试图在数组中的对象中搜索? – xil3 2010-07-05 08:58:08

回答

2

array_key_exists - http://php.net/manual/en/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://uk.php.net/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 
2

我会转换数组1像删除外键(至少暂时),然后在迭代通过数组2时,我会比较阵列1与array_key_exists转换数组1。

1

我希望我理解你的问题,有可能成为语言障碍,但是这里我们去:

所以基本上你有3个数组,你想用最后一个来检查第一个,看看这些值/键是否存在于第一个?那么你想要做的第一件事就是将你的第一个数组重构成一些可以很容易地翻译的东西,以便检查下两个数组的值和键。所以让我们称之为第一阵列$ mapArray:

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

现在,这应该给我们这样的:

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

所以,现在让我们称之为第2个数组$ 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 

希望这是什么你正在寻找或至少帮助你找到你正在寻找的东西。

1

另一种方法:我们第一阵列减少到一个维度:

$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属性。