PHP數組 怎麼從指定位置開始查詢?

來源:互聯網
上載者:User
$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);

比如我想從c開始迴圈,怎麼寫?


回複討論(解決方案)

這樣可以達到你要的?擷取array的鍵名,如果鍵名等於c才進入迴圈。

這樣可以達到你要的?擷取array的鍵名,如果鍵名等於c才進入迴圈。



能否詳細一點啊?

$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);

$arr1 = array_slice($arr, 2); // ?arr的下?2?始取出

foreach($arr1 as $key=>$val){
echo $key.'='.$val.'
';
}

$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);

$arr1 = array_slice($arr, 2); // ?arr的下?2?始取出

foreach($arr1 as $key=>$val){
echo $key.'='.$val.'
';
}



可是這個下標不一定在第二位啊,,也可能c的前面有十個呢,或者有一百呢?

$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);$flag = 0;foreach($arr as $key=>$val){if($key=='c'){$flag = 1;}if($flag==1){echo $key.'='.$val.'
';}}

??好?。

$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);$index = array_search('c',array_keys($arr));$arr1 = array_slice($arr, $index);foreach($arr1 as $key=>$val){echo $key.'='.$val.'
';}

樓上的說的不錯。。

其實 #5 的思路是對的:遍曆一遍,不對指定鍵出現之前的資料做處理
而 #6 的代碼需要抄寫指定鍵及以後的資料,至少要多消耗寫記憶體

$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);$flag = false;foreach($arr as $key=>$val){    if(! ($flag = $flag ? $flag : $key == 'c')) continue;    echo $key.'='.$val.'
';}

寫成這樣,更合理些

$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);foreach($arr as $key=>$val){    if(! ($flag = $key == 'c' ? true : !empty($flag))) continue;    echo $key.'='.$val.'
';}

學習了,又瞭解了幾個數組函數的用法

$a = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);for (;;next($a)) {    if ( key($a) == 'c' ) {while (list($key, $val) = each($a)) {echo "$key => $val
";}break;}}

有沒有辦法根據鍵名獲得在數組中的位置指標
做迴圈的時候直接從指標開始
從頭遍曆有時間浪費,而且foreach棄置站台申請了一塊不必要記憶體
6樓和9樓的代碼很好了,不過用過彙編和C++的表示對核心代碼有強迫症...
吃完飯研究下php手冊中的數組函數

$i = $v = 0;echo memory_get_usage(), PHP_EOL;$a = array(1,2,3,4,5,6,7);echo memory_get_usage(), PHP_EOL;foreach($a as $i=>$v) {  echo $i, ' ', memory_get_usage(), PHP_EOL;  break;}echo memory_get_usage(), PHP_EOL;
123792
124520
0 124520
124520

顯然 foreach棄置站台申請了一塊不必要記憶體 是不正確的

有沒有辦法根據鍵名獲得在數組中的位置指標
做迴圈的時候直接從指標開始
從頭遍曆有時間浪費,而且foreach棄置站台申請了一塊不必要記憶體
6樓和9樓的代碼很好了,不過用過彙編和C++的表示對核心代碼有強迫症...
吃完飯研究下php手冊中的數組函數



有沒有辦法根據鍵名獲得在數組中的位置指標
做迴圈的時候直接從指標開始
從頭遍曆有時間浪費,而且foreach棄置站台申請了一塊不必要記憶體
6樓和9樓的代碼很好了,不過用過彙編和C++的表示對核心代碼有強迫症...
吃完飯研究下php手冊中的數組函數

$i = $v = 0;echo memory_get_usage(), PHP_EOL;$a = array(1,2,3,4,5,6,7);echo memory_get_usage(), PHP_EOL;foreach($a as $i=>$v) {  echo $i, ' ', memory_get_usage(), PHP_EOL;  break;}echo memory_get_usage(), PHP_EOL;
123792
124520
0 124520
124520

顯然 foreach棄置站台申請了一塊不必要記憶體 是不正確的



感謝xu大指正...剛學習的時候認為foreach是直接迴圈原數組,後來看到哪的文章還是部落格的,foreach是複製一份再遍曆,內容真是忘了,$value棄置站台應該不會重新整理記憶...我仔細看看

$i = $v = 0;echo memory_get_usage(), PHP_EOL;$a = array(1,2,3,4,5,6,7);echo memory_get_usage(), PHP_EOL;foreach($a as $i=>$v) {  echo $i, ' ', memory_get_usage(), PHP_EOL;  break;}echo memory_get_usage(), PHP_EOL;
123792
124520
0 124520
124520

顯然 foreach棄置站台申請了一塊不必要記憶體 是不正確的



原來是我腦補錯了...

';foreach (fn() as $k => $v) {    echo memory_get_usage() . '
';}echo memory_get_usage() . '
';


分別對全域變數的數組和函數返回的數組做測試,結果是不一樣的,foreach會緩衝函數運行結果,迴圈結束立刻釋放,而遇到已存在變數就直接引用

那是當然的
你 fn() 返回的數組總得要有人來接吧?
沒有給真實的變數,php也要把它放在堆棧中吧

學習了,又瞭解了幾個數組函數的用法


你又來了我都3級了
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.