2010-07-05 4 views
1

Comment vérifier si une clé de tableau spécifique existe et comment la comparer?Check Arrays avec différentes clés?

1. Le tableau ressemble à ceci.

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

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

2. Tableau ressemble à ceci

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

Maintenant, j'ai besoin de les comparer et d'obtenir l'identifiant d'entre eux.

Qu'est-ce que je cherche est quelque chose comme ça

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

Comment puis-je faire cela?

+0

Est-ce que ce sera juste un tableau simple, ou essayez-vous également de rechercher dans les objets dans le tableau? – xil3

Répondre

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']; 
     } 
    } 
} 

ou array_search - Dans les deux cas 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']; 
    } 
} 

vous devriez finir avec:

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

Je voudrais transformer le tableau 1 en supprimant la clé externe (au moins temporairement) puis en effectuant une itération à travers le tableau 2, je comparerais avec le tableau 1 transformé avec array_key_exists.

1

J'espère avoir compris votre question, il pourrait y avoir être une barrière de la langue, mais ici nous allons:

donc fondamentalement vous avez 3 tableaux et vous voulez utiliser le dernier à vérifier par rapport au premier pour voir si ces valeurs/clés existe dans le premier? Eh bien, la première chose que vous voulez faire est de réorganiser votre premier tableau en quelque chose qui peut facilement être traduit pour vérifier les valeurs et les clés des deux tableaux suivants. Appelons donc le premier tableau $ mapArray:

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

Maintenant, cela devrait nous donner quelque chose comme:

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

permet donc maintenant appeler le 2e tableau de arrayIds $ et le 3e arrayNames de $. Pour voir si am id existe et pour obtenir son nom quand donné le tableau arrayIds, tout ce que vous devez faire est de cette $:

//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 

Et l'inverse:

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

espère que c'est ce que vous cherchez ou au moins vous aide à trouver ce que vous cherchez.

1

Une autre approche: Nous réduisons le premier réseau à une dimension:

$first = array(); 

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

donne:

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

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

) 

(j'ai utilisé un tableau au lieu d'un objet, mais il fonctionne de la même).

puis on calcule l'intersection des clés:

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

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

qui donne:

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

) 

Il est pas tout à fait ce que vous voulez, mais vous pouvez facilement accéder à la propriété de nom via $element->name.