数组合并只显示一个值

时间:2014-03-24 09:41:41

标签: php sql arrays

我有这两个问题

 mysql_select_db($database_dbconnect, $dbconnect);
$query_Asset = "SELECT idAsset, AssetName FROM Asset WHERE idLocation = '1'";
$AssetUp = mysql_query($query_Asset, $dbconnect) or die(mysql_error());
$array1 = mysql_fetch_assoc($AssetUp);

mysql_select_db($database_dbconnect, $dbconnect);
$query_DocUp = "SELECT AssetDocStand.idAsset, Asset.AssetName FROM AssetDocStand INNER JOIN Asset ON AssetDocStand.idAsset = Asset.idAsset
WHERE AssetDocStand.idDocumentStandards = '2' AND Asset.idLocation ='1'";
$DocUp = mysql_query($query_DocUp, $dbconnect) or die(mysql_error());
$array2 = mysql_fetch_assoc($DocUp);

一个人获取当前位置的所有资产。另一个获取我当前位置的所有资产,其中包含上传标准为2的文档。请注意我已为此帖发布了所有错误检查。

如果我打印结果如下:

do{
print_r($array1);
echo "<br>";
}while($array1 = mysql_fetch_assoc($AssetUp));
echo "<br><br><br>";

do{
print_r($array2);
echo "<br>";
 }while($array2 = mysql_fetch_assoc($DocUp));
 echo "<br><br><br>";

我得到以下内容。

 Array ( [idAsset] => 10000005 [AssetName] => HP ) 
 Array ( [idAsset] => 10000006 [AssetName] => HP Server ) 
 Array ( [idAsset] => 10000009 [AssetName] => HP Laptop ) 
Array ( [idAsset] => 10000010 [AssetName] => Office Printer ) 
Array ( [idAsset] => 10000023 [AssetName] => test ) 



 Array ( [idAsset] => 10000023 [AssetName] => test ) 

不,我一直在尝试仅输出没有上传文档的资产。如您所见,这将是第一个列表中的前4个资产。现在我接下来要做的就是合并数组然后在我的新数组上使用array_unique但是当我这样做时;

 $array3= array_merge($array1, $array2);
 print_r($array3);

我只看到以下内容;

idAsset; 10000023
AssetName; test

我不明白其他4个资产去了哪里?谁能帮我看看我的错误?谢谢你们和gals

4 个答案:

答案 0 :(得分:1)

在你的第一个do ... while循环中,每次迭代都用数据库中的下一行覆盖$array1中的前一个值,你不会将该行添加到数组中。所以之后只有最后一行留在数组中,这与$array2中的那一行相同。您需要确保$array1包含整个查询结果,例如。像这样:

$array1[] = mysql_fetch_assoc($AssetUp);

编辑:另请注意,不推荐使用mysql_ *函数。如果可能,您可能希望将其替换为例如库MySQLi。这甚至可以为您提供一个函数(mysqli_fetch_all()),您可以使用该函数在一次调用中获取整个查询结果。

答案 1 :(得分:1)

只需替换下面的一点变化并检查:$ array1到$ array1 []和$ array2到$ array2 []

do{
print_r($array1);
echo "<br>";
}while($array1[] = mysql_fetch_assoc($AssetUp));
echo "<br><br><br>";

do{
print_r($array2);
echo "<br>";
 }while($array2[] = mysql_fetch_assoc($DocUp));
 echo "<br><br><br>";

答案 2 :(得分:1)

首先,不要使用mysql_*,因为这些功能已弃用,很快就会停止支持。请改用mysqli_ *和PDO。

那就是说,你正在使用,甚至理解mysql_fetch_assoc完全错误。让你的思想指向正确方向的一个例子可能是这样的:

<?
  $q = mysql_query("...");
  while ($f = mysql_fetch_assoc($q)) {
    //do something, irrelevant
  }
  print_r($f);
?>

这将仅打印出查询结果的最后一行。这是因为mysql_fetch_assoc获取行,返回它,并将指针移动到下一行。循环结束后,您只有变量的最后一行。你没有意识到这一点,因为你的print_r在你的循环中是 ,所以如果你把它移到循环之外,你会很快意识到你只看到最后一行。

可能适合您的示例是这样的:

<?
  $q1 = mysql_query("");
  $array1 = Array();
  while ($f = mysql_fetch_assoc($q1)) $array1[] = $f;

  $q2 = mysql_query("");
  $array2 = Array();
  while ($f = mysql_fetch_assoc($q2)) $array2[] = $f;

?>

如果您在这两个循环后执行print_r($array1);print_r($array2);,则会看到$array1$array2拥有完整的结果集。你只需要在之后合并它们,这应该可以解决问题。

请告诉我这是否适合您。

答案 3 :(得分:1)

更改您的代码,因为每次循环$array1时,$array2都会从数据库中保存新的获取行值

do{
print_r($array1);
echo "<br>";
}while($array1 = mysql_fetch_assoc($AssetUp));
echo "<br><br><br>";

do{
print_r($array2);
echo "<br>";
 }while($array2 = mysql_fetch_assoc($DocUp));
 echo "<br><br><br>";

作为

    $firstArray = array();
    $secondArray = array();
    do{
    print_r($array1);
    array_push($firstArray,$array1);
    echo "<br>";
    }while($array1 = mysql_fetch_assoc($AssetUp));
    echo "<br><br><br>";

    do{
    print_r($array2);
    echo "<br>";
    array_push($secondArray ,$array2);
     }while($array2 = mysql_fetch_assoc($DocUp));
     echo "<br><br><br>";

    $array3= array_merge($firstArray, $secondArray );
 print_r($array3);