J'ai une question. J'ai donc ce tableau:

$a_list_id = array(
   0 => 1234
   1 => 739
   3 => 538
);

Et ce tableau:

$a_users = array(
    0 => array(
        id => 15627,
        name => test
    ),
    1 => array(
        id => 1234,
        name => test1
    ),
    2 => array(
        id => 739,
        name => test2
    )
)

Le résultat devrait être:

$a_response = array(
    0 => array(
       id => 1234,
       name => test1 
    )
)

Parce que l'id 1234 est dans les deux tableaux. J'essaye avec array_intersect mais ne fonctionne pas. Pouvez-vous m'aider s'il vous plaît ?

0
user7424312 24 janv. 2017 à 12:49

4 réponses

Meilleure réponse

Utilisez simplement des boucles:

$a_response = array();
foreach ($a_users as $array) {
    if (in_array($array['id'], $a_list_id)) {
        $a_response []= $a_users;
    }
}
1
Vincent Decaux 24 janv. 2017 à 09:56

Essayez le code ci-dessous en utilisant la fonction array_search ():

$a_list_id = array(1234, 538,739);

$a_users = array(
 array(
    'id'=> 15627,
    'name' => 'test'
),
 array(
    'id' => 1234,
    'name' => 'test1'
),
 array(
    'id' => 739,
    'name' => 'test2'
)
);

foreach($a_users as $a_user){
  if (in_array($a_user['id'], $a_list_id)) {
     $a_response[array_search($a_user['id'], $a_list_id)] = $a_user;
  }
}

print_r($a_response);
0
mith 24 janv. 2017 à 10:14

Avez-vous essayé d'utiliser array_intersect_uassoc? http://php.net/manual/en/function.array- intersect-uassoc.php

function compare_ids($a, $b)
{
    return $a - $b['id'];
}

print_r(array_intersect_uassoc($a_list_id, $a_users, "compare_ids"));
0
kjames 24 janv. 2017 à 10:23

Array_intersect ne produira des résultats utiles que si les valeurs des deux tableaux peuvent être converties dans le même type. Vous avez un tableau d'entiers et un autre tableau de tableaux, ils ne peuvent jamais * correspondre, donc intersect sera toujours vide

Si vous voulez une intersection entre les tableaux, vous avez deux options:

  • Indexez les tableaux afin que leurs clés correspondent aux valeurs que vous souhaitez croiser et utilisez array_intersect_key
  • Implémentez votre propre logique de comparaison de tableaux avec array_uintersect et une fonction de rappel qui sait la structure des tableaux comparés

Exemple du premier:

$a_list_id = array(
   1234 => 1234
   739 => 739
   538 => 538
);

$a_users = array(
    15627 => array(
        id => 15627,
        name => test
    ),
    1234 => array(
        id => 1234,
        name => test1
    ),
    739 => array(
        id => 739,
        name => test2
    )
)

var_dump (array_intersect_key ($a_users, $a_list_id));

Exemple de ce dernier:

var_dump (array_uintersect ($a_users, $a_list_id, function ($user, $id) {
    return $user ["id"] - $id; // Result should be 0 if they match, as per documentation
}))

* Ils peuvent être considérés comme identiques dans le cas où une valeur est l'entier 0 et l'autre est un tableau vide, mais ce n'est pas très utile

1
GordonM 24 janv. 2017 à 15:16