$value); if($somecondition){ foreach($arr as $k => $v){ $arr[$k][] = array("value"=>""); } } }?>
有這麼一種情況, 迴圈建立一個二維數組並添加元素, 但是出現某個條件$somecondition的時候,就往數組中每個$key中添加一個value為空白的元素。
添加完以後用看,發現增加的為空白的元素都跑到了數組的最前面,這是為何?
怎麼才能正確添加啊。
回複討論(解決方案)
如果對給出的值沒有指定鍵名,則取當前最大的整數索引值,而新的鍵名將是該值加一。如果指定的鍵名已經有了值,則該值會被覆蓋。
至少你的描述是有問題 $key 和 $k 並不是一回事
所以
$arr[$key][] = array("value"=>$value);
和
$arr[$k][] = array("value"=>"");
賦值的位置是不一樣的
你最好貼出你需要的格式樣本
至少你的描述是有問題 $key 和 $k 並不是一回事
所以
$arr[$key][] = array("value"=>$value);
和
$arr[$k][] = array("value"=>"");
賦值的位置是不一樣的
你最好貼出你需要的格式樣本
$value); if($somecondition){ foreach($arr as $k => $v){ $arr[$k][] = array("value"=>""); } } } ?>
我整個的過程是這樣的。
先在while(mysql_fetch_array($res1))中確定每個key的先後順序。
然後在while(mysql_fetch_array($res2))中在每個key增加元素,遇到某個條件的時候,就補個空元素。
我得出數組的是:
{
key1:[[],{"value":""},{"value":""},{"value":""},{"value":36.63},{"value":35.97},{"value":32.8},{"value":32.65}
key2:[[],{"value":""},{"value":""},{"value":""},{"value":36.63},{"value":35.97},{"value":32.8},{"value":32.65}
}
而我原計劃得到的數組是:
{
key1:[{"value":36.63},{"value":35.97},{"value":""},{"value":""},{"value":""},{"value":32.8},{"value":32.65}
key2:[{"value":36.63},{"value":35.97},{"value":""},{"value":""},{"value":""},{"value":32.8},{"value":32.65}
}
數組前面多出的[],目前看不影響畫圖,但終歸不和標準格式相匹配。
至少你的描述是有問題 $key 和 $k 並不是一回事
所以
$arr[$key][] = array("value"=>$value);
和
$arr[$k][] = array("value"=>"");
賦值的位置是不一樣的
你最好貼出你需要的格式樣本
或者我要實現我LS那個邏輯,我該如何做?
既如此,你為何不關聯查詢呢?
回2L,我在foreach中列印了$k的名字, 確實是和外層的while中的$key是一樣的啊。
回5L,資料庫存的是一些個時間點,每個時間點有幾十種$key對應的值,
我現在的做法,是先查詢一遍,例如是全天的,算個總排名top10確定$key的先後順序,然後再查一遍賦值。
要是直接在資料庫中關聯查詢,我目前mysql的select命令很不熟悉,又擔心某個key前個時間點在第10位,下個時間點在第11位,到時候又統計不到了,
分兩次查詢時,如果兩次查詢之間資料發生了變化,你打所如何處理?
查第一次選個較大的範圍算總排名top10, 能夠一定程度反映總體的一個趨勢, 中間那些時間點排名並不是和總排名一樣,但大體趨勢是一致,而且我查的還是記錄。
然後由於某些原因,某些時間點沒有記錄,我就想在這個時間點給每個key插個空值進去,就是不知道為啥插進去的空值跑到了數組的最前面。。。。
對了,假如是一個一維數組的話,我直接可以用arsort函數進行排名,但是由於json格式固定了,所以只能弄格式規定的那種二維的。
有點明白你的意思了
while(mysql_fetch_array){ $arr[$key][] = array("value"=>$value); if($somecondition){ $arr[$key][] = array("value"=>""); }}
有點明白你的意思了
Python code?123456while(mysql_fetch_array){ $arr[$key][] = array("value"=>$value); if($somecondition){ $arr[$key][] = array("value"=>""); }}
.
$somecondition就是判斷mysql_fetch_array中的到的時間點比上一個時間點差距太大,那麼我就按照間隔補上時間點,這個時候這個時間點我應該是給所有的key補個空值,所以我就用了foreach遍曆一遍,補充的結果就是補的空值跑到了數組的最前面。
應該還是要foreach吧。。
思路應該是這樣的
while(mysql_fetch_array){
if($somecondition){ //如果差距太大
$arr[$key][] = array("value"=>""); //則插入空值,多於一個時用 for 迴圈
}
$arr[$key][] = array("value"=>$value); //加入資料
}
思路應該是這樣的
while(mysql_fetch_array){
if($somecondition){ //如果差距太大
$arr[$key][] = array("value"=>""); //則插入空值,多於一個時用 for 迴圈
}
$arr[$key][] = array("value"=>$value); //加入資料
}
……
我知道哪裡錯了。。我mysql查詢出來的語句,不是按照時間點的順序的,是按照key的順序排的。。。坑爹了。。
你不是兩次查詢的嗎?
第一次按照key的順序排
第二次按照時間點的順序排
思路應該是這樣的
while(mysql_fetch_array){
if($somecondition){ //如果差距太大
$arr[$key][] = array("value"=>""); //則插入空值,多於一個時用 for 迴圈
}
$arr[$key][] = array("value"=>$value); //加入資料
}
……
謝謝了。。其實邏輯和實現都沒錯,是我mysql不精,group by後面兩個條件順序寫反了。