ホームページ > バックエンド開発 > PHPチュートリアル > 指定された位置から開始して PHP 配列をクエリするにはどうすればよいですか?

指定された位置から開始して PHP 配列をクエリするにはどうすればよいですか?

WBOY
リリース: 2016-06-23 13:54:50
オリジナル
927 人が閲覧しました

$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);例cからループさせたいのですが、どうやって書けばいいでしょうか?



ディスカッション (解決策) への返信

これであなたが望むものを達成できますか?配列のキー名を取得し、キー名が c と等しい場合にのみループに入ります。

これであなたの望みを達成できますか?配列のキー名を取得し、キー名が 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.'
';
}


ただし、この添字は必ずしも 2 番目の位置にあるとは限りません。あるいは、c の前に 10 が来る場合もあれば、100 が来る場合もあります。

そうですか

??分かった?。 りー

上の人の言うことは良いことです。 。


実際、#5 の考えは正しいです。つまり、一度トラバースし、指定されたキーが表示される前にデータを処理しません

そして、#6 のコードは、指定されたキーと後続のデータをコピーする必要があります。書き込みメモリが増えました

$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.'<br>';	}}
ログイン後にコピー

このように書かれています、より合理的です

$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.'<br>';}
ログイン後にコピー


いくつかの配列関数の使い方を学び、理解しました

$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.'<br>';}
ログイン後にコピー

キー名に基づいて配列内の位置ポインタを取得する方法はありますか

ループするときはポインタから直接スタート

最初からたどるのは時間の無駄、foreachでコピーを作成して不要なメモリに適用

6階と9階のコードはとても良いですが、アセンブリを使用していますと C++ でコアコードを表現します...

夕食後、PHP マニュアルを勉強してください
の配列関数

$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.'<br>';}
ログイン後にコピー
123792
124520
0 124520

124520


明らかに
foreach はコピーを作成し、不要なメモリ
を割り当てます

キー名に基づいて配列内のデータを取得する方法はありますか? 位置ポインター はループするときにポインターから直接開始します
最初からたどるのは時間の無駄であり、foreach はコピーを作成して適用します不要な記憶のために
6階と9階のコードはとても良いですが、コアコードの強迫性障害をアセンブリとC++を使用して表現しました...

夕食後、PHPマニュアルで配列関数を勉強してください



キー名に基づいて配列内の位置ポインターを取得する方法はありますか? ループを実行するときは、ポインターから直接開始します

最初からたどるのは時間の無駄です、そして foreach に適用されるコピーを作成します不要なメモリの一部です
6階と9階のコードはとても良いのですが、コアコードをアセンブリとC++で表現したため、強迫性障害になっています...
夕食後、PHPの配列関数を勉強してくださいマニュアル




$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<br />";		}		break;	}}
ログイン後にコピー
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 はコピーを作成し、不要なメモリを適用しました
これは間違っています


間違いを犯したことに気づきました...

$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;
ログイン後にコピー
ログイン後にコピー


グローバル変数の配列と関数によって返される配列をそれぞれテストすると、結果は異なります。foreach は関数の実行結果をキャッシュし、ループ終了後にすぐに解放し、既存の変数に遭遇した場合は直接参照します。


もちろん
fn() によって返された配列を誰かが取得する必要がありますよね?
実際の変数はありません。PHP もそれをスタックに置く必要があります

私はそれを学び、いくつかの配列関数の使用法を理解しました

あなたは再びここに来て、私はすでにレベル 3 です

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート