求教給一個二維數組增加元素的問題。

來源:互聯網
上載者:User
$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後面兩個條件順序寫反了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.