PHP - 比较两个多维数组并相应地附加到一个数组

时间:2016-06-29 04:31:50

标签: php arrays multidimensional-array

今天我在PHP中找出一些东西时遇到了一些麻烦。由于我通常会有一些絮絮叨叨的倾向,我会尽量简短但简洁。这就是我想要做的。

数组#1是一个多维数组,包含针对数据库中的用户表执行的MySQL查询的结果。它看起来像这样:

Array ( [0] => Array ( [id] => 79 [firstname] => John [lastname] => Doe [province] => Province [email] => someemail@gmail.com [primaryphone] => 123-456-7890 ) [1] => Array ( [id] => 113 [firstname] => Jane [lastname] => Doe [province] => Province [email] => email@gmail.com [primaryphone] => 123-456-7890 ) )

数组#2是另一个多维数组,其中包含针对数据库中的成员资格表执行的MySQL查询的结果,该成员资格表包含与当前组关联的用户的ID。它看起来如下:

 Array ( [0] => Array ( [userid] => 79 ) [1] => Array ( [userid] => 115 ) [2] => Array ( [userid] => 124 ) )

我要做的是,对于阵列#1中返回的每个用户,在[userid]下的数组#2中查找与数组#1中的值[id]匹配的值。如果找到每个用户的匹配项,请在阵列#1中为该用户附加键和值[ismember] => 1 - 如果没有匹配项,则将[ismember] => 0对添加到阵列#1。

我觉得这应该是一个非常简单的过程,我可能只是错过了一些基本的东西......但是我已经有一段时间了,并且没有取得多大进展。谢谢大家的时间和帮助。

==编辑== 第一个数组由以下MySQL查询生成:

$query = "
    SELECT 
        id,
        firstname,
        lastname,
        province,
        email,
        primaryphone
    FROM userstable
";
try
{
    $stmt = $db->prepare($query);
    $stmt->execute();
}
catch(PDOException $ex)
{
    die("Failed to run query: " . $ex->getMessage());
}
$allusersdetails = $stmt->fetchAll();

第二个数组由查询生成:

$query = "
    SELECT 
        userid
    FROM membershipstable
    WHERE templateid = :currenttemplateid
";
try
{
    $stmt = $db->prepare($query);
    $stmt->bindParam(':currenttemplateid', $currenttemplateid);
    $stmt->execute();
}
catch(PDOException $ex)
{
    die("Failed to run query: " . $ex->getMessage());
}
$templateusers = $stmt->fetchAll();

2 个答案:

答案 0 :(得分:1)

您可以使用以下一个查询替换2个查询:

$query = "
    SELECT 
        u.id,
        u.firstname,
        u.lastname,
        u.province,
        u.email,
        u.primaryphone,
        (CASE WHEN m.userid IS NULL THEN 0 ELSE 1 END) AS ismember
    FROM userstable AS u
    LEFT JOIN membershipstable AS m ON
      m.templateid = :currenttemplateid AND
      u.id = m.userid
";
try
{
    $stmt = $db->prepare($query);
    $stmt->bindParam(':currenttemplateid', $currenttemplateid);
    $stmt->execute();
}
catch(PDOException $ex)
{
    die("Failed to run query: " . $ex->getMessage());
}
$allusersdetails = $stmt->fetchAll();

这仍会吸引所有用户,无论他们是否为会员,但会将ismember添加为列。

AS xuserstable AS u的{​​{1}}部分只是在membershipstable AS m的持续时间内将该字母指定为表格的别名。基本上,它主要帮助您除了键入外,还允许您SELECT使用同名列的表。)

欢迎来到结构化查询语言的精彩世界:D

修改 并且万一有人来到这里试图完成标题所要求的问题,但是没有碰巧查询数据库但是确实有一个OP的确切格式的数组:

JOIN

答案 1 :(得分:0)

试试这个,

$firstArray = //your first array
$secondArray = // your second array
foreach($firstArray as $fa) {
    $id = $fa['id'];
}
foreach($secondArray as $sa) {
    $userId = $sa['userid'];
}
if($id === $userID) {
    $firstArray['ismember'] = 1;
} else {
    $firstArray['ismember'] = 0;
}