當前位置:首頁 » 編程語言 » phpforin循環語句

phpforin循環語句

發布時間: 2022-04-20 03:50:22

php如何避免在循環中使用sql語句

1、循環內拼接sql語句,循環外執行
例如:
//假設這里的$users是一個很大的數組,我們要循環取出其中的值foreach($users as $user){//這部分的sql是我從項目中隨便摘抄出來的。主要就是實現拼接sql語句$sql .= " ('{$order_sn}', '{$this->user_id}', '{$deliver_fee}', 0, "
. " '', '', '', "
. " '{$add_time}','{$order_status}', '{$order_amount}', '{$remark}', "
. " '{$pickup_code}', '{$self_pickup}', '{$collect_order_sn}', '{$key}', {$reservation_time}),";
}
//循環中拼接好sql之後,我們在循環外執行$sql = substr($sql, 0, -1);
DB::statement($sql);1234567891011

2、where條件換為where in()
比如我們的where()條件中要使用大規模的數組,那麼在語句應該是:
foreach($arr as $v){
DB::table('')->where('id',$v->id);
}123

此時我們可以轉變一下:
//先取出條件數組$arr,在直接執行whereIn即可DB::table('')->whereIn('id',$arr);12

注意:如果數據量很大,比如幾十萬條數據,那麼whereIn也會成為代碼的瓶頸,這個函數適用於數據量不是很大的情況。

❷ php+mysql循環查詢語句,,

樓上的不是很好,查了5次資料庫。。。
foreach($uid as $rs){
$uid_all .= isset($uid_all)?','.$rs:$rs;
}
$sql="select uid,username from table where uid in (uid_all)";

❸ PHP的for循環嵌套問題,高手請進(需要講一些細節)

for循環的執行原理:

for循環的參數有(初始值;判斷條件;更新循環變數表達式) 三者均不是必須的,若三者不完整則必須在適當的時候手動調用break命令終止循環,否則循環將一直持續下去成為死循環

執行過程為:

首先判斷初始值是否滿足判斷條件,如滿足則開始循環,若不滿足則直接跳過循環因此如下的循環是不會被執行的:

for($i=0;$i<0;$i++)

然後執行一次循環體(包裹在for後面大括弧里的代碼)

使用更新循環變數表達式更新變數

使用判斷條件進行判斷,若不滿足則終止循環,若滿足則再次執行循環體

因此如下循環會被執行5次

for($i=0;$i<5;$i++)


for循環嵌套:

for循環嵌套的話將優先執行內循環,再執行外循環,如下:

//外循環開始
for($i=0;$i<10;$i++)
{
//這里是外循環的循環體
for($j=0;$j<20;$j++)//內循環開始
{
//這里是內循環的循環體
}//內循環結束
}//外循環結束

當開始執行循環時,首先執行外循環的循環體(其中包括了內循環),此時$i=0;在此過程中當執行到內循環處時開始執行內循環,$j由0遞增到19;執行完20遍內循環後外循環結束,$i++;此時$i=1,再次開始執行外循環。

綜上,外循環體共執行10次,內循環體執行20(內循環本身的重復次數)*10(每次外循環均執行20次內循環)=200次

多重嵌套按此方法逐層分析


代碼分析:

for($i=1;$i<=9;$i++){
echo$j,'';
for($j=1;$j<=$i;$j++){
}
}

按上述方法進行分析的話,執行步驟如下:

  1. $i=1代入外循環,循環開始

  2. 執行echo $j,此時未定義$j,輸出Notice: Undefined variable: j in C:wampwwwzhlx3.php on line 3

  3. 執行至內循環處,內循環開始,$j=1代入循環

  4. 內循環體什麼都沒做,循環執行1次(最終$j=2;$i=1<$j;內循環終止)

  5. $i++;$i此時等於2;再次開始外循環

  6. echo $j;此時$j的變數還等於2;因此輸出2

  7. 執行至內循環處,內循環開始,$j重新被初始化為1代入循環

  8. 內循環體什麼都沒做,循環執行2次(最終$j=3;$i=2<$j;內循環終止)

  9. $i++;$i此時等於3;再次開始外循環

  10. echo $j;此時$j的變數還等於3;因此輸出3

  11. 執行至內循環處,內循環開始,$j重新被初始化為1代入循環

  12. 內循環體什麼都沒做,循環執行3次(最終$j=4;$i=3<$j;內循環終止)

  13. $i++;$i此時等於4;再次開始外循環

  14. 。。。。。以此類推


第二段代碼和第三段代碼與第一段的不同之處僅在於內外循環的輸出語句不同,按照此方法分析即可得到輸出結果


循環演算法是基礎演算法之一,原理簡單但是分析比較麻煩,尤其涉及到嵌套。在剛開始學的時候經常搞不懂這是很正常的。解決的方法就是靜下心來,把自己當做是一台速度極慢的計算機,按照for循環的執行過程逐條語句瀏覽,很快就可以弄明白的,祝你成功!

❹ 詳細講解foreach循環的用法

foreach(char arg in args)//"char"是args裡面每個元素的類型,arg就是從args裡面提取出的「char」類型的一個元素,in是關鍵字,args就是你要操作的集合類型數據。其實和for()循環類似,只是不需要記錄循環步數,同時,在foreach過程中,args是不允許被改變的。
{
if(arg == ch)
{
//存在
}
else
{
//不存在
}
)

❺ php難題(foreach循環難題)

$db->query("update p_config set values='$values' where name='$name'");
改為
$db->query("update p_config set values=".$values."where name=".$name);
你上面那種寫法容易出錯 下面的寫法比較直觀 字元串和變數更容易區分

❻ php,ajax

如果是要使用返回的數據拼寫html代碼的話,可以使用eval函數遍歷返回的數據,然後使用forin進行循環,在forin裡面拼寫html代碼

❼ php中在循環外部如何強制結束循環

不可能。PHP 是單線程的。如果這個線程正在執行一個循環。就只能在循環中做條件判斷。不可能有另外的代碼同時在運行。。自然也不能通過其它代碼中斷它。。

如果你一定要這么做,我這里只有一個不是辦法的辦法。。。在循環裡面寫一個讀取文件。判斷這個文件的內容是0還是1。。如果是0則中斷。。這樣。如果在循環結束之前。有東西把這個文件的內容變成 0 了。那循環也就中斷了。。

不過,這樣的做法效果非常低。。你也可以改為。判斷一個文件是否存在。。如果存在則中斷循環並刪除這個文件。以便下次可以繼續循環。。任意程序只要創建了這個文件就會讓循環中斷。

❽ php中自定義函數正確的語句是

像數學中的函數一樣,y=f(x)是函數基本的表達形式,x可看做是參數,y可看做是返回值,即函數定義就是一個被命名的、獨立的代碼段,它執行特定的任務,並可能給調用它的程序返回一個值。

自定義函數 函數的聲明

在編寫程序的過程中,我們會經常碰到某些功能模塊在PHP中沒有提供系統函數,這樣就需要我們自己定義函數,即自定義函數,自定義函數的規則如下:

  • 每個函數的第一行都是函數頭,由聲明函數的關鍵字function、函數名和參數列表三部分組成。

  • 每個自定義函數都必須使用function關鍵字聲明。

  • 函數名可以代表整個函數,可以將函數命名為任何名稱,只要遵循變數名的命名規則即可。但函數名稱必須唯一,且不能與系統函數重名。

  • 聲明函數時函數名後面的花括弧也是必須有的,在花括弧中表明了一組可以接受的參數列表,參數就是聲明的變數,然後在調用函數時傳遞給它值。參數列表可以沒有,也可以有—個或多個參數,多個參數使用逗號分隔。

  • 函數體位於函數頭後面,用花括弧括起來。函數被調用後,執行到retun語句或最外面的花括弧後結束,返回到調用的程序。

  • 使用關鍵字return可以從函數中返回一個值,然後返回到調用程序處繼續執行。

  • Demo
  • <?php

    /* 將使用雙層for循環輸出表格的代碼聲明為函數,函數名為table */

    functiontable(){

    echo"<table align='center' border='1' width='600'>";

    for(out=0;out<10;out++){

    bgcolor=out%2==0?"red":"blue";//各行換背景色

    echo"<tr bgcolor=".bgcolor.">";

    for(in=0;in<10;in++){

    echo"<td>".(out*10+in)."</td>";

    }

    echo"</tr>";

    }

    echo"</table>";

    }

    ?>

    函數的調用

    不管是自定義的函數還是系統函數,如果函數不被調用,就不會執行。函數被調用後開始執行函數體中的代碼,執行完畢返回到調用的位置繼續向下執行。調用規則如下:

  • 通過函數名稱去調用函數。

  • 如果函數有參數列表,還可以通過函數名後面的圓括弧傳入對應的值給參數,在函數體中使用參數來改變函數內部代碼的執行行為。

  • 如果函數有返回值,當函數執行完畢時就會將return後面的值返回到調用函數的位置處。

  • Demo
  • <?php

    /* 將使用雙層for循環輸出表格的代碼聲明為函數,函數名為table */

    functiontable(){

    echo"<table align='center' border='1' width='600'>";

    for(out=0;out<10;out++){

    bgcolor=out%2==0?"red":"blue";//各行換背景色

    echo"<tr bgcolor=".bgcolor.">";

    for(in=0;in<10;in++){

    echo"<td>".(out*10+in)."</td>";

    }

    echo"</tr>";

    }

    echo"</table>";

    }

    ?>

    <?php

    table();

    ?>

    函數的參數

    參數列表是由零個、一個或多個參數組成的。每個參數是一個表達式,用逗號分隔。對於有參函數,在PHP腳本程序中和被調用函數之間有數據傳遞關系。定義函數時函數名後面括弧內的表達式稱為形式參數(簡稱「形參」),被調用函數名後面括弧中的表達式稱為實際參數(簡稱「實參」),實參和形參需要接順序對應傳遞數據。如果函數沒有參數列表,函數執行的任務就是固定的,用戶在調用函數時不能改變函數內部的一些執行行為。

    Demo

    <?php

    /**

    自定義函數table()時,聲明三個參數,參數之間使用逗號分隔

    @paramstringtableName 需要一個字元串類型的表名

    @paramintrows 需要一個整型數值設置表格的行數

    @paramintcols 需要另一個整型值設置表格的列數

    */

    functiontable(tableName,rows,cols){

    echo"<table align='center' border='1' width='600'>";

    echo"<caption><h1>tableName</h1></caption>";

    for(out=0;out<rows;out++){//使用第二個參數rows指定錶行數

    bgcolor=out%2==0?"red":"blue";

    echo"<tr bgcolor=".bgcolor.">";

    for(in=0;in<cols;in++){//使用第三個參數cols指定表列數

    echo"<td>".(out*cols+in)."</td>";

    }

    echo"</tr>";

    }

    echo"</table>";

    }

    ?>

    <?php

    table("千度的表格",10,10);

    ?>

    函數的返回值

    函數的返回值是函數執行的結果,調用函數的腳本程序不能直接使用函數體裡面的信息,但可以通過關鍵字return向調用者傳遞數據。return語句注意點如下:

  • return語句可以向函數調用者返回函數體中任意執行結果值。

  • 在函數體中如果執行了return語句,它後面的語句就不會被執行。

  • Demo
  • <?php

    /**

    自定義函數table()時,聲明三個參數,參數之間使用逗號分隔

    @paramstringtableName 需要一個字元串類型的表名

    @paramintrows 需要一個整型數值設置表格的行數

    @paramintcols 需要另一個整型值設置表格的列數

    */

    functiontable(tableName,rows,cols){

    returnStr="這是返回的字元串";

    echo"<table align='center' border='1' width='600'>";

    echo"<caption><h1>tableName</h1></caption>";

    for(out=0;out<rows;out++){//使用第二個參數rows指定錶行數

    bgcolor=out%2==0?"red":"blue";

    echo"<tr bgcolor=".bgcolor.">";

    for(in=0;in<cols;in++){//使用第三個參數cols指定表列數

    echo"<td>".(out*cols+in)."</td>";

    }

    echo"</tr>";

    }

    echo"</table>";

    returnreturnStr;

    }

    ?>

    <?php

    echotable("千度的表格",10,10);

    ?>

❾ php中foreach循環語句中可以使用sql查詢語句嗎比如

可以,但是你這樣做對資料庫的資源是很大的消耗,如果數據不多的話可以拿全集通過PHP進行篩選,或者進行in查詢

❿ php 當有兩個for循環,

$sql=mysql_query("select*fromkjnumwherekjdatein($wherein)and((>1and<11)or(>1and<11)or(shi>1andshi<11)or(ge>1andge<11)or(si>1andsi<11)or(wu>1andwu<11))");
//再用PHP去操作

比如你的結果是:

$list=array(
array('kjdata'=>"20180401",''=>2,'shi'=>4,'ge'=>3,'si'=>2,'wu'=>4),
array('kjdata'=>"20180401",''=>4,'shi'=>2,'ge'=>3,'si'=>2,'wu'=>4),
array('kjdata'=>"20180402",''=>2,'shi'=>4,'ge'=>3,'si'=>1,'wu'=>4)....);

//你要轉成以kjdata為key的3維數組
$list=array(
'20180401'=>array(
array(''=>2,'shi'=>4,'ge'=>3,'si'=>2,'wu'=>4),
array(''=>4,'shi'=>2,'ge'=>3,'si'=>2,'wu'=>4)
),
'20180402'=>array(
array(''=>2,'shi'=>4,'ge'=>3,'si'=>1,'wu'=>4).............)
);
//如上
$table=array();
foreach($listas$key=>$vo){
foreach($voas$v){
$table[$key][$v['']]++;
$table[$key][$v['shi']]++;
$table[$key][$v['ge']]++;
$table[$key][$v['si']]++;
$table[$key][$v['wu']]++;
}
}

var_mp($table);

//對於PHP即使1萬次循環也不過不到0.01秒,而sql一條語句可能就是這個時間,所以盡量查詢出結果,再PHP中操作分離
熱點內容
伺服器暫時無法運行是什麼意思 發布:2025-01-24 02:45:59 瀏覽:146
配置最高的千元機哪個好 發布:2025-01-24 02:38:49 瀏覽:239
如何破解軟體登錄不了伺服器 發布:2025-01-24 02:05:07 瀏覽:14
春節三新演算法 發布:2025-01-24 02:03:22 瀏覽:20
我的世界伺服器房間號2020電腦版 發布:2025-01-24 01:28:05 瀏覽:401
微信提示存儲空間不足 發布:2025-01-24 01:19:53 瀏覽:966
安卓電腦管家如何清除緩存 發布:2025-01-24 00:55:42 瀏覽:150
怎麼上傳歌曲到qq音樂 發布:2025-01-24 00:45:30 瀏覽:67
養貓用什麼配置 發布:2025-01-24 00:37:58 瀏覽:814
pythongps 發布:2025-01-24 00:37:51 瀏覽:815