• ベストアンサー

配列の要素数について

私はよくperlで for ($i=0; $i<=$#hoge; $i++) {} などと書いたりするのですが、phpで同じようにしたいのですが、 その際、perlの配列最後の添字を返す$#hogeにあたるものはないものなのでしょうか? あくまでforeachなど別の方法論や複数行ロジックを書いて取得するなどではなく配列の最後の添字を簡単に取得できるかが問題なのです。

  • PHP
  • 回答数5
  • ありがとう数0

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

  • ベストアンサー
  • fake-tang
  • ベストアンサー率24% (186/772)
回答No.1

count() 使い方は count() PHP とかで検索すべし。

sa7s0ylx
質問者

補足

タイトルが悪いのかもしれませんが、要素の数ではなく、最後の添え字を取得したいのです。

その他の回答 (4)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.5

#4 です。 キーとして使われる最大の数値を求めればいいということなら、 <?php $ary[1]=10;$ary[3]=100;$ary[7]=10000;$ary[5]=1000; print(count($ary)); print("\n"); print(end($ary)); print("\n"); print(key($ary)); print("\n"); print(end(array_keys($ary))); print("\n"); print(max(array_keys($ary))); 4 1000 5 5 7 max が使えなくもないですね。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

PHPの配列はすべてPerlで言うところのハッシュなので、 質問者さんの求めるようなことを、お手軽に 行うことはできないと思います。 たとえば <?php $ary[1]=10;$ary[3]=100;$ary[7]=10000;$ary[5]=1000; print(count($ary)); print("\n"); print(end($ary)); print("\n"); print(key($ary)); print("\n"); print(end(array_keys($ary))); こんなのがあったとしてその実行結果は 4 1000 5 5 です。 質問で求められているのはここで、"7" を 得ることだと思うのですが、これを求めるような 関数はなかったように記憶しているのですが 違いますでしょうか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

end(array_keys($hoge)); じゃないでしょうか?

回答No.2

perlをしっかり理解していないので見当はずれかもしれませんが、 配列の添字というのはPHPでは配列のキーと呼ぶものに当たりますよね。 配列の最後は end()で取得出来、キーはkey()で取得出来るので、 key(end($hoge)); と言う事になるでしょうか。 for ($i=0; $i<=$#hoge; $i++) {} はPHPでは、 $c = count($hoge); for ($i=0; $i<$c ; $i++) {} あたりが#1さん指摘の通り、一般的じゃぁないかと。 参考まで。

関連するQ&A

  • 配列を回すとき、最後の要素だけ違う処理をしたい

    hoge[0]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[1]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[2]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[3]に対して、配列の中身を処理して, 最後にカンマを付与しない というようなことをするとき、 どう書けばよいでしょうか? for ($i = 0 ; $i <count($hoge); $i++) {   if($i< count($hoge)-1){    //配列の要素が最後じゃないのに対する処理     .",";  }else{    //配列の要素が最後のに対する処理  } } ってしたら、とりあえず、動いたのですが、 普通はどういう風に書くのでしょうか? foreachとか、あるいは、配列の最後に対してする何か 書き方ってあるのでしょうか

    • ベストアンサー
    • PHP
  • 配列の要素を表示しない

    PHP初心者です、宜しくお願いいたします。 下のような配列を表示させるソースを書きましたが、要素を表示しません。 どこが間違っているのかさっぱり分かりません。誰かお助けください。 <?php $color3 = array(0 => " red ", 1 => " green ", 2 => " blue "); foreach($color3 as $key => $val) { echo "現在の添え字は ". $key . "<br/><br/>"; echo "現在の要素は ". $Val . "<br/>"; } ?> 以下のような表示になり、要素が表示されません。 現在の添え字は 0 現在の要素は 現在の添え字は 1 現在の要素は 現在の添え字は 2 現在の要素は

    • ベストアンサー
    • PHP
  • PHP 配列の添字に変数は使えない?

    phpで初歩的な質問ですが、foreachでループしてる間 配列にどんどん文字を入れたいと思います。 $i = 0 ; foreach($entry as $no){ $sort[\'$i\'] = \"hogehoge\" ; $i++; } イメージは↑こんな感じにしたいのですが、配列の添字に変数は 使えないようなことが書いてありました。 こういう動きをする場合にはどうすれば良いのでしょうか? ご教授よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 連想配列の配列の使い方

    C言語でいうところの構造体の配列(要素は"hoge"と"fuga"のみ)を perlで表現する場合、連想配列の配列にするのが一般的でしょうか? 以下の様なソースコードなのですが、perlらしさが失われている気がします。 perlらしく書くとしたらどう書くのが良いでしょうか? [ソース] @list; #この配列の要素に連想配列を入れる sub input{ #list.txtの中にはhogeとfugaの値がカンマ区切りで記入されている open(IN, "list.txt");  $i = 0; while ($xx = <IN>) { ($list[$i]{"hoge"}, $list[$i]{"fuga"}) = split /,/, $xx; $i++; } close(IN); } sub output{ for($i = 0; $i <= $#list; $i++){ print $list[$i]{"hoge"}, $list[$i]{"fuga"}; } }

    • ベストアンサー
    • Perl
  • 配列のループ展開

    下記で配列内を検索しても、「存在しません」になります。 どこが、間違っているのでしょうか? <?php for($i = 1; $i <= 42; $i++) { $seminar = "http://www.hoge.com/hoge/".sprintf("%04d", $i).".html"; echo $seminar; } $url = array( $seminar ); $myUrl = "http://www.hoge.com/hoge/0020.html"; if(in_array($myUrl, $url)){ echo "配列に".$myUrl."は存在します。"; } else { echo "配列に".$myUrl."は存在しません。"; } ?>

    • ベストアンサー
    • PHP
  • 連想配列とforeach

    連想配列 %hogeにおいて、.name の名前が最後に付く配列の値を取り出したいと思い、下記のようにしました。 foreach ($hoge{/.*\.name$/}) {  print "$_\n"; } としてみましたが期待した出力がされませんでした。こういう描き方って出来ないんでしょうか?それともどこか間違ってますか?

    • ベストアンサー
    • Perl
  • 配列を返す関数から、一つの要素だけ取り出したい。

    例えば、配列を返す関数、get_array がある時、 その配列の0番目の要素だけが欲しい時、 Perlでは、 $val = get_array[0]; (配列リファレンスを返す場合は、$val = get_array->[0]; ) みたいな感じで書けたと思いますが、 PHPでは、 $val = get_array()[0]; みたいに書けないですよね? 以下のように、二行で書かなければダメですか? $array = get_array(); $val = $array[0];

    • ベストアンサー
    • PHP
  • 連想配列と添字配列の違いについて

    MySQL初心者です。 mysql_fetch_arrayとmysql_fetch_assocの違いがいまいち理解できません。 ネットで調べると mysql_fetch_array — 連想配列、添字配列、またはその両方として結果の行を取得する mysql_fetch_assoc — 連想配列として結果の行を取得する と書かれていますが、連想配列と添字配列の違いが理解できませんでした。 全くの初心者でもわかるようにそれぞれの違いを教えていただけませんか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • jQuery for内にある配列の後のドットは何?

    jQuery(?) for文内で、配列の後にドット演算子があるのですが、これは何でしょうか? for ( var i=0, len=hoge.length; i<len; i++ ) {  hoge[i].max = 5;  hoge[i].count = i; } ・maxはどこにある(属している)のでしょうか? ・hoge配列内? ・そもそもmaxは変数? ・ちなみに、hogeは、getElementsByClassNameで取得しています ・この場合のドット演算子は、セレクタの一種? ・変数に格納しているわけではなくて、DOMを操作しているだけ?

  • 配列の値をループ

    よろしくお願いします。 例えば、$ary=array(1,2,3,4,5,6,7); という配列があるとします。この1,2,3,4,5,6,7の値を ループで表現することは可能でしょうか?? for文で試してみましたが、 $hoge="for($i=0;$i<7;$i++){ print $i; }"; $ary=array($hoge); 表示結果 for($i= でした。""で囲んだのでそのまま文字としてなったんだと 思います。""をはずすとエラーになります。 理想の表示結果は当然 1,2,3,4,5,6,7です。 行いたいことの意図はわかっていただけたでしょうか? 可能な場合、どういう記述をすればうまくいくのでしょうか? それとも不可能なのでしょうか?よろしくお願いします。 環境 php4.4.4 apache2 winXP

    • ベストアンサー
    • PHP