• ベストアンサー

配列のX件目~Y件目を全件ループ以外に取得できますか?

配列のX件目~Y件目を取得するもっと良い方法がもしあれば教えていただきたいです。 今のところ以下で考えています。 <?php $array = Array(1,2,3,4,5); $count = 0;$x = 3;$y = 5; foreach($array as $key >= $val){ if($count >= $x && $count <= $y) $new_array[] = $val; $count++; } ?>

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • cojirou
  • ベストアンサー率50% (59/117)
回答No.1

array_slice はいかがでしょうか。 ご参考までに。

参考URL:
http://www.php.net/manual/ja/function.array-slice.php
natsuyori
質問者

お礼

array_slice最高です。 PHP4以降配列は本当に便利ですね。 ありがとうございました。

その他の回答 (1)

  • bonyamk
  • ベストアンサー率29% (49/166)
回答No.2

べつの方法で・・・とは言っても最適なのはもうでていますが^^; <?php $array = Array(1,2,3,4,5); $x = 3;$y = 5; for($i=$x;$i<=$y;$i++){ $new_array[] = $array[$i]; } ?>

natsuyori
質問者

お礼

たしかにこれでもOKですね。foreach一辺倒になっていました(^^;)ありがとうございます。

関連するQ&A

  • 配列の値を集めた1つの文字列として取得するには

    Array ( [0] => a [1] => あ [2] => 123 [3] => 55 ) この配列を "a","あ","123","55" といった1つの文字列として取得したいです。 <?php $list = array("a","あ","123",55); $r = ""; for($i=0; $i<count($list); $i++){ $r .= ',"'.$list[$i].'"'; } $r = substr($r,1); echo $r; ?> このような形でできましたが、もっと良い方法はありますか? そして上の方法で良い場合は、下の1~4のどれが一番適切ですか? [1] for($i=0; $i<count($list); $i++){ $r .= ",\"".$list[$i]."\""; } [2] for($i=0; $i<count($list); $i++){ $r .= ',"'.$list[$i].'"'; } [3] foreach($list as $key => $val){ $r .= ",\"".$val."\""; } [4] foreach($list as $key => $val){ $r .= ',"'.$list[$i].'"'; }

    • 締切済み
    • PHP
  • テーブルデータ表示

    mysqlからデータをphpで取得し以下のような多次元配列になっています。 Array ( [0] => Array ( [id] => 116 [name] => あああ ) [1] => Array ( [id] => 58 [name] => いいい ) [2] => Array ( [id] => 89 [name] => ううう ) ) 単純にデータを表示させたく以下のようにしましたが<th>$key2</th>の箇所が上記配列の場合 2回繰り返されて表示されてしまいます。ここはフィールド名なので1回の表示でいいのですが どのように記述すれば思うような表示になるでしょうか? echo "<table border=\"1\">"; echo "<tr>"; foreach ($tmp1 as $key => $val) { foreach ($val as $key2 => $val2) { echo "<th>" . $key2 . "</th>"; //フィールド名 } } echo "</tr>"; foreach ($tmp1 as $key => $val) { echo "<tr>"; foreach ($val as $key2 => $val2) { echo "<td>" . $val2 . "</td>"; // 取得したデータをある分だけ繰り返し } echo "</tr>"; } echo "</table>";

    • ベストアンサー
    • PHP
  • 参照変数の親配列を取得

    データの多次元配列があって、値に応じて動的に関数を選択し 中身の値を引数で渡すみたいな感じの処理をしています ほとんどの処理は中身の値だけあれば事足りるのですが 稀にキー値を使いたい処理がでてきます 本当に稀なので引数にキー値も渡すようにするのは 無駄が多くなるように思うので避けたく できれば参照変数で渡される値から 親配列でのキー値を取得したいと思っています $arr2A=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); $arr2B=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); $arr2C=array('a'=>array('fnc'=>'A','あ','い','う'),'b'=>array('fnc'=>'B','か','き','く'),'c'=>array('fnc'=>'C','さ','し','す')); foreach($arr2A as $key=>$val){ $fncs[$val['fnc']]($val); } foreach($arr2B as $key=>$val){ $fncs[$val['fnc']]($val); } foreach($arr2C as $key=>$val){ $fncs[$val['fnc']]($val); } $fncs=array( A=>function(&$arr){ }, B=>function(&$arr){ }, C=>function(&$arr){ //ここで稀にキー値も使いたい }); 実際のコードはかなり長いので載せられませんが 要約すると上記のような感じの処理です まずどのデータ配列の集合から渡されたのかが明確ではありませんので indexOfなどでキー値を得るのというのが難しいです 現在は、その処理が必要なデータ行について処理前に 中身にキー値をあらかじめ入れてしまう というように対応しているので、一応解決はしているのですが もし参照変数から親配列を得る方法が あればと思い質問させていただきました ”そんなものはない”という回答も あきらめつくのでお願いします

    • ベストアンサー
    • PHP
  • 配列の要素の値をループ中に変更して確認したいのですが、下記やり方では、

    配列の要素の値をループ中に変更して確認したいのですが、下記やり方では、なぜダメなのでしょうか? $arr = array("値1", "キー1" => "値2", "値3"); foreach($arr as $key => $val){ $arr[$key] = "-{$val}-"; echo $val."<br />"; } foreach($arr as $key => $val){ echo "<br />".$val; } 上のforeachの結果が、下と同じようになると期待したのですが、うまくいきません。 なんで、上のforeachと下のforeachの結果が異なるのでしょうか? foreach文で要素の値が更新されるのは、foreach文が終了した瞬間なのでしょうか。 それとも、値はすぐに更新されているけれども、foreach文の処理(順番に抽出する作業?)は既にスタートしてしまっているので、ループ中に更新されても、途中で反映することはできない、ということなのでしょうか? さっぱり分からないので、誰か教えてください。 「配列の要素の値をループ中に変更して確認したい」というよりは、 「なんで、二つのforeach文で結果が異なるか知りたい」です。

    • ベストアンサー
    • PHP
  • 配列のキー取得

    現在の$str配列には、下記のようになっています。 Array ( [9] => test [5] => aaa [7] => bbb) print_r(array_keys($str)); とすると下記のように配列のキー値がわかりますが、 Array ( [0] => 9 [1] => 5 [2] => 7) キーを下記のように一つづつほかの配列に代入したい場合はどのようにしたらいいのでしょうか? for($i=0;$i<count($str);$i++){ $new_str[$i]=キーを取得する関数; } ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 連想配列のキー値(連番)を基に、別の配列を作るには?

    下記のように、キー値の一部に連番を持った連想配列 があるのですが、このキー値と連番で別の配列を 簡単に作る方法は無いでしょうか? もとの配列 $ary = array("item0"=>"x","item1"=>"y","item2"=>"z","data0"=>"o","data1"=>"p","data2"=>"q"); 上の$aryから $item=array([0]=>"x",[1]=>"y",[2]=>"z"); $data=array([0]=>"o",[1]=>"p",[2]=>"q"); のような形の配列を得たいのです。 foreach($ary as $key => $val){ } の構文で、$key値を調べて分断し、新しい配列に pushしていくしかないでしょうか? ※PHP4.3です

    • ベストアンサー
    • PHP
  • files関数配列取得について

    Notice: Undefined index: in /var/www/html/intern/sr/add.php on line 72 Warning: array_keys(): The first argument should be an array in /var/www/html/intern/sr/add.php on line 72 Notice: Undefined index: in /var/www/html/intern/sr/add.php on line 73 Warning: array_values(): The argument should be an array in /var/www/html/intern/sr/add.php on line 73 上記のようなエラーが発生します。 ソースは以下の通りです。 やりたいことはpostから送られてきたfileを連想配列? として取得することです $file_key = array_keys($_FILES["$jisseki_img"]); $file_val = array_values($_FILES["$jisseki_img"]); for ($i = 0; $i < count($file_key); $i++) { $$file_key[$i] = mb_convert_encoding($file_val[$i], "EUC-JP", $enc_input); }

    • ベストアンサー
    • PHP
  • mysql_fetch_arrayを何度も使いたい

    phpとmysqlを使っています。 配列$valuesがあります。 その値は一部だけmysqlのフィールドdの中に格納しています。 両方の値を比較してもし一致すればチェックボックスを作るという処理をしています。 また、同時に一致した数もそれぞれ取得したいと考えています。 イメージ的には、□はチェックボックスとして()には、その配列の値とフィールドdの値に一致する数が入ります。 □(33) □(13) □(1) □(22) □(3)  □(16) □(15) □(9) □(23) □(32)  □(4) □(16) □(7) □(6) □(11)  □(5) □(21) □(1) □(4) □(15)  □(13) □(10) □(3) □(19) □(8)  □(0)のとき非表示になるようにしています。 <?php $m = mysql_connect('localhost','root',password); $mm = "SELECT * FROM tableA"; mysql_set_charset('utf8'); $mmm = mysql_query($mm,$m); $values=array( "chk1"=>array("a1","a2","a3","a4","a5","a6","a7","a8","a9","a10") ,"chk2"=>array("b1","b2","b3","b4","b5","b6","b7","b8","b9","b10") ,"chk3"=>array("c1","c2","c3","c4","c5","c6","c7","c8","c9","c10") ); foreach($values as $key=>$array){ foreach($array as $val){ $checked=(isset($_REQUEST[$key]) and in_array($val,$_REQUEST[$key]))?" checked":""; $count = ""; while($r = mysql_fetch_array($mmm)){ if($val === $r['d']){$count++:} } if($count>0 && !$count==""){ $h = $h.htmlspecialchars($val, ENT_QUOTES, 'UTF-8').'<input type="checkbox" name="'.$key.'[]" value="'.$val.'"'.$checked.'/>('.$count.') '."\n"; } } } print "<br />\n"; } ?> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <form method="get" action="checkbox2.php"> <?php echo $h; ?> <input type="submit" value="送信" /> </form> </body> </html> これではmysql_fetch_arrayが一度しか使えないので、配列の値a2以降が進みません。 こういうときはどのようにするべきでしょうか。 また、if($val === $r['d']){$count++:}でカウントしていますが、もっといい方法はありますか。 その他変な箇所があれば指摘して頂けると嬉しいです。 お願いします。

    • ベストアンサー
    • PHP
  • 文字列の置き換えについて

    下記のようなテキストファイルを読み込みます。 【お名前】 {@name} 【フリガナ】 {@kana} 【年齢】 {@age} そしてphpでこのようにしました。 $test = array( 'name' => '名前太郎', 'kana' => 'ナマエタロウ', ); $file = 'body.txt'; $body = file_get_contents($file); foreach ($test as $key => $val) { if ( is_array( $val ) ) { foreach ( $val as $val2 ) { $body = preg_replace( "/{@$key}/u", implode(',', $val), $body ); } } else { $body = preg_replace( "/{@$key}/u", $val, $body ); } } echo $body; 結果は、@nameと@kanaは配列にある通りの文字列に変わりますが@ageは そのまま表示されてしまいます。 $testの配列で該当するパターンがない場合には@hogeの値を空白にしたいのですが どうすればいいでしょうか? foreachを$testで行っているのでループ内ではできないような気がしています。 いい方法があれば教えてください!

    • ベストアンサー
    • PHP
  • array keys について

    すいません。何度かここで質問しているのですが、いまいち分からない部分があります。 既に何十時間も悩んでいて解決しません。初歩的な質問ですがよろしくお願いします。 結果としてk2k3という表示を期待しているのですが・・。 まず、$key2にはk1k2k3という配列が入り、 それからarray_keys($key2)でキーを取得するのですから array_keys($key2)にはynbが配列として入りますよね? つまり [0]=y [1]=n [2]=b となり、 これをin arrayでyという値を探して、あった場合にはunsetで削除。 何がおかしいのかさっぱり分かりません。 すいませんが間違っている部分を教えてもらえませんか? <?php $food["y"]= "k1"; $food["n"]= "k2"; $food["b"]= "k3"; foreach($food as $key1=>$key2){ if(in_array("y",array_keys($key2))) unset($food[$key1]); } ?>

    • 締切済み
    • PHP

専門家に質問してみよう