2016-02-13 47 views
0

我有此表在我的数据库:阵列双指数(其他2个阵列)

table 
---------- 
reportID (fK) 
cityID(fK) 
parameterID(fK) 
value 

同城可以在同一个报告出现多次。

我想检索值和回声它们(在后面的文件)作为$值[cityID] [参数标识]即,回波值用于参数标识= 3 cityID = 100我只写

echo $value[100][3] 

我做了什么至今

SELECT * FROM table WHERE reportID=## 

while($row = $result->fetch_assoc()) {  
    $selectcityID_array[] = (isset ($row['cityID']) ? $row['cityID'] : ""); 
    $selectparameterID_array[] = (isset ($row['parameterID']) ? $row['parameterID'] : ""); 
    $selectvalue_array[] = (isset ($row['value']) ? $row['value'] : "");  
} 

如何合并了3列呢?可能与一个array_combine函数?编辑

array_combine($selectvalue_array , ($selectcityID_array, $selectparameterID_array); 

诗的

SELECT * FROM table WHERE reportID=## 

后,始终会是可能与所有cityID为同一reportID一个数组,包括数字多次城市在同一份报告中?

即阵列(100,120,133,100,180 ......)

我试过array_unique功能,但它削减了这一数字超过一次的城市。我也试过array_chunk,但没有运气...

我需要呼应:

CITY PARAMETER 1     PARAMETER 2 

cityID $value[cityID][parameterID] $value[cityID][parameterID] 

cityID $value[cityID][parameterID] $value[cityID][parameterID] 

...... .......................  .................... 

谢谢!

+0

你想摆脱表行“价值” 'cityID'和'parameterID'列? – RomanPerekhrest

+0

对!谢谢! – codeispoetry

回答

1

更改您的代码如下所示:

... 
$selectvalue_array = []; 

while ($row = $result->fetch_assoc()) { 
    if (!isset($selectvalue_array[$row['cityID']])) { 
     $selectvalue_array[$row['cityID']] = []; 
    }  
    $selectvalue_array[$row['cityID']][$row['parameterID']] = $row['value']; 
} 
... 

现在,您可以通过以下方式获得一定的行值:

// of course, if there is confidence that '100' as cityId and '3' as parameterId exist 
echo $selectvalue_array[100][3]; 
+0

谢谢!我编辑了我的问题......你是否认为有可能为同一个reportID包含所有cityID的数组,包括在同一个报表中包含更多时间的城市? ie array(100,120,133,100,180 ...) – codeispoetry

+0

不客气。至于你的编辑:你可以添加额外的数组'$ reportCities = [];',然后在循环中为指定的'reportId''$ reportCities [] = $ row累加所有的城市id(甚至重复的) 'cityID']'。 – RomanPerekhrest

+0

对不起,罗马,但$ selectvalue_array不起作用,如果我在我的报告中有两次城市:如果$ selectvalue_array [100] [3]出现2次,具有不同的值,系统如何知道我指的是哪一个至? – codeispoetry