2013-12-14 34 views
1

我从数据库中的两个不同表中提取数据。一旦我拥有了我所需要的全部内容,我想要将这些数组合并打印到HTML表格中。组合数组将不会显示在单个表格行中

它们都结合在一起,但从它看起来array_merge正在将第二个数组追加到第一个数组中,就像它应该那样。但是,我的问题是,当我从新组合数组中的数据创建一个表时,它将在一行中显示我想从第一个数组获得的所有字段,并在第二行显示第二个数组中的所有数据。有没有办法强制array_merge 100%将数组合并成一个?

$names = Array (
[0] => Array (
    [PointID] => -3621 
    [AddressID] => -503718 
    [CommonName] => AARONS 
    [MapDataID] => -2 
    [AlternateAddressID] => 
    [GISObjectID] => 28 
    [DateChanged] => 2013-06-19 13:48:44.947 
    [EnteredDate] => 2010-09-21 08:21:26.847 
) 
) 

$addressInfo= Array (
[0] => Array (
    [AddressID] => -503718 
    [LocationType] => 1 
    [HouseNumber] => XXXX 
    [AdditionalInfo] => 
    [...] 
) 
) 

阵列一旦合并:

Array ( 
[0] => Array ([PointID] => -3621 [AddressID] => -503718 [CommonName] => XXXXX) 
[1] => Array ([AddressID] => -503718 [LocationType] => 1 
    [HouseNumber] => XXXX [AdditionalInfo] => [StreetPrefix] => N 
    [StreetPreType] => [StreetName] => XXXX [StreetType] => AVE 
    [StreetSuffix] => [Apt] => [XStreetPrefix] => [XStreetPreType] => 
    [XStreetName] => [XStreetType] => [XStreetSuffix] => [VenueName] => XXXX 
    [City] => XXXXX [vsState] => 52 [Zip] => XXXX) 
) 

代码:

echo "<table> 
<tr> 
<th>CN</th> 
<th>House#</th> 
<th>St Name</th> 
<th>St Prefix</th> 
<th>St Type</th> 
<th>City</th> 
<th>Zip</th> 
</tr>"; 
//Combine the arrays into one 
$output = array_merge($names, $addressInfo); 
print_r($output); 
//Run a loop 
foreach ($output as $test) 
    { 
    echo "<tr>"; 
    echo "<td>".$test['CommonName']."</td>"; 
    echo "<td>".$test['HouseNumber']."</td>"; 
    echo "<td>".$test['StreetName']."</td>"; 
    echo "<td>".$test['StreetPrefix']."</td>"; 
    echo "<td>".$test['StreetType']."</td>"; 
    echo "<td>".$test['City']."</td>"; 
    echo "<td>".$test['Zip']."</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 

回答

0

好吧,我正在创建另一个更清晰的答案。

这是您当前的代码:

$cn = "AARONS"; //Connect to NWSDB 

$pdo = new PDO("odbc:NWS","docserver","docserver"); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$result = $pdo->prepare("SELECT CommonName,AddressID from CommonNameAddress where CommonName like :name"); 
$result->execute(array(':name' => "%$cn%")); 
//Put the results in an array for use later in the table 
$names = array(); 
$addquery = array(); 
while($row = $result->fetch(PDO::FETCH_ASSOC)) { 
    $addquery[] = $row['AddressID']; 
    $names[] = $row; 
} 



$pdo = new PDO("odbc:NWS","docserver","docserver"); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
//Create an array for storing the address information from the below query 
$addressInfo = array(); 
//Loop the query to get a result for every CommonName 
foreach ($addquery as $address) { 
    //Match the AddressID from the CommonNames Table to the Address information in the Address Table 
    $common = $pdo->prepare("SELECT HouseNumber,StreetPrefix,StreetName,StreetType,City,Zip from Address where AddressID like :id"); 
    $common->execute(array(':id' => $address)); 
    //Put the results in an array for use later in the table 
    while($row2 = $common->fetch(PDO::FETCH_ASSOC)) { $addressInfo[] = $row2; } 
} 

这里是你能做什么:

$cn = "AARONS"; //Connect to NWSDB 

$pdo = new PDO("odbc:NWS","docserver","docserver"); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$result = $pdo->prepare("SELECT CommonName, CommonNameAddress.AddressID, Address.HouseNumber, Address.StreetPrefix, Address.StreetName, Address.StreetType, Address.City, Address.Zip from CommonNameAddress LEFT JOIN Address ON Address.AddressID=CommonNameAddress.AddressID where CommonName like :name"); 
$result->execute(array(':name' => "%$cn%")); 
//Put the results in an array for use later in the table 
$names = array(); 
while($row = $result->fetch(PDO::FETCH_ASSOC)) { 
    $names[] = $row; 
} 
print_r($names); 
?> 

告诉我们是怎么回事。

+0

该死!这很好!非常感谢soooo!我终于用自己的for循环来想出它,但是你的方法效率提高了十亿倍,所以我就这么做了!再次感谢! –

+0

Coool :-)请加我的答案。祝你的项目好运。 – Thibault

0

显然你的2个阵列$names$addressInfo已经包含了数据的另一个层次。

你可能想这样做:

$output = array_merge($names[0], $addressInfo[0]); 

如果它不能正常工作,请同时提供$names$addressInfoprint_r()输出在合并之前。

+0

那个真的很接近的男人。我改变了你的行: '$ output [] = array_merge($ names [0],$ addressInfo [0]);' 修复它,但问题是它只是返回一行结果。 –

+0

只需给我们'print_r($ names)'和'print_r($ addressInfo)',我们将能够为您提供帮助。 – Thibault

+0

$ names = 'Array([0] => Array([PointID] => -3621 [AddressID] => -503718 [CommonName] => AARONS [MapDataID] => [AlternateAddressID] => [GISObjectID ] => 28 [DateChanged] => 2013-06-19 13:48:44.947 [EnteredDate] => 2010-09-21 08:21:26.847))' –

相关问题