PHP引用的数组

时间:2013-05-15 13:59:18

标签: php arrays

我一直在处理我的应用程序,该应用程序旨在将sql查询中的数据从PHP文件返回到客户端C#应用程序。

查询在PHP端执行,并加载到引用的XML查询中,并将其发送到客户端。然后,客户端读取XML并提取所需的数据。

然而,我有点困惑。出于某种原因 - 并非所有信息都被退回。

PHP:

    $query =  "SELECT * FROM Parks";
    $result = mysql_query($query);

        while($row = mysql_fetch_array($result))
         {  
$array = array (
            $row['Name'] => 'Name',
            $row['File'] => 'File', 
            $row['Image'] => 'Image',
            $row['Description'] => 'Description',
            $row['Author'] => 'Author',
            $row['CS'] => 'CS',
            $row['Size'] => 'Size',
            $row['Theme'] => 'Theme',
            $row['Mountains'] => 'Mountains',
            $row['Hills'] => 'Hills',
            $row['Rivers'] => 'Rivers',
            $row['Lake'] => 'Lake',
            $row['Ocean'] => 'Ocean',
            $row['Island'] => 'Island',
            $row['SetOfIslands'] => 'Setofislands',
            $row['Waterfalls'] => 'Waterfalls',
            $row['Download'] => 'Download',
            $row['ID'] => 'ID',
            $row['Rating'] => 'Rating',
            $row['FileSize'] => 'FileSize',
            $row['DateUploaded'] => 'Dateuploaded',

            );
            $xml = new SimpleXMLElement('<Parks/>');
            array_walk_recursive($array, array ($xml, 'addChild'));
            echo $xml->asXML(); 

但是,在客户端,XML缺少某些值。

例如, 运行1返回以下值:     名称,FileImage,说明,作者,CS,大小,主题,湖,瀑布,Dateuploaded,下载,ID,等级,文件大小

Run 2返回时: 名,文件,图片,描述,作者,CSSize,主题,瀑布,河流,Dateuploaded,下载,ID,评分,文件大小

正如您所看到的,第一次运行不返回参数'Rivers',但第二次运行不会。 每次运行似乎都会返回不同的值。

在检查我的数据库之后,它丢失的所有值都存储为“True”或“False”变量。我不确定这是否与它有任何关系 - 但是根据数据库中的数据检查返回的结果我发现没有良心。


简而言之,为什么数组不存储我要求的所有数据?为什么它选择存储的过程似乎是如此随机?

PS:我之前回复过每一行,可以确认数据库行的名称是否正确,数据是否存在于其中....


编辑: 返回的xml的一个示例:

  <?xml version="1.0"?>
<Parks><Name>Some Name</Name>
<File>The File Path</File>
<Image>Link To Screenshot</Image>
<Description>Random description </Description>
<Author>Someone</Author>
<CS>False </CS><
Size>small</Size>
<Theme>space</Theme>
<Island>False</Island>
<Lake>True</Lake>
<Ocean>False</Ocean>
<Waterfalls>True</Waterfalls>
<Rating>0</Rating>
<ID>166</ID>
<FileSize>3706121</FileSize>
<Dateuploaded>2013-04-04</Dateuploaded>
</Parks>

1 个答案:

答案 0 :(得分:1)

问题是数据库中一行中的多个列具有相同的值,并使用这些值作为数组的索引。

如果你在db中有这一行:

File | Image | Rivers | Whatever
--------------------------------
1    | 1.jpg | true   | true

使用以下代码生成数组:

while($row = mysql_fetch_array($result)) {  
    $array = array (
            $row['File'] => 'File', 
            $row['Image'] => 'Image',
            $row['Rivers'] => 'Rivers',
            $row['Whatever'] => 'Whatever'
    );
}

它会再次错过Rivers,因为RiversWhatever都会转到数组的相同索引(在这种情况下为true),所以后一个值覆盖前者。

所以,在注释key => value中创建像@karmafunc这样的数组,并使用array_keys()来获取键。