目錄
回复讨论(解决方案)
首頁 後端開發 php教程 求教给一个二维数组增加元素的问题。

求教给一个二维数组增加元素的问题。

Jun 27, 2016 pm 01:18 PM

<?php        while(mysql_fetch_array){                $arr[$key][] = array("value"=>$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"=>"");
赋值的位置是不一样的

你最好贴出你需要的格式示例

<?php                   while(mysql_fetch_array($res1)){                $arr[$key][] = array(); //为了确定每个key在数组的前后顺序        }         while(mysql_fetch_array($res1)){                          $arr[$key][] = 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后面两个条件顺序写反了。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

PHP 8.1中的枚舉(枚舉)是什麼? PHP 8.1中的枚舉(枚舉)是什麼? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

See all articles