• ベストアンサー

配列内の値に

preg_replaceで 配列内のスペースを<br>に置き換えてみたのですが期待しなかった結果がでたので、不思議に思い質問させていただきました。 <? //ケース1 $array[1] = "1 <br>"; $array[2] = "2 <br>"; $array[3] = "3 <br>"; $array[4] = "4 <br>"; $array[5] = "5 <br>"; $array[6] = "6 <br>"; print_r($array); ?> 上記のコードでは以下のように表示されるのですが、 Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 ) <? //ケース2 $txt = "1 2 3 4 5 6 "; $array = explode(" ", $txt); $array = preg_replace ('/\s/', ' <br>', $txt); print_r($array); ?> ケース2では以下のように表示されます。 これはどうしてなのでしょうか? もしご存知の方おられましたらどうぞよろしくおねがいいたします。 1 2 3 4 5 6

  • jyuu
  • お礼率83% (553/665)
  • PHP
  • 回答数2
  • ありがとう数1

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

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

$txt = "1 2 3 4 5 6 "; $array = explode(" ", $txt); として$arrayに配列を代入していますが、その後再度 $array = preg_replace ('/\s/', ' <br>', $txt); として$txtのスペースを単に<br>に変えた文字列を 代入してますよね? なので print_r($array); しても$arrayはただの文字列だからArrayの表示はされません。

jyuu
質問者

お礼

あ。 完全にずぼらでした^^。 $txt = "1 2 3 4 5 6 "; $array = preg_replace ('/\s/', ' <br>', $txt); $array = explode(" ", $array); print_r($array); とすることで求めていた同じ結果を得ることができました。 ありがとうございます。

その他の回答 (1)

回答No.1

ブラウザが、出力結果をHTMLとして解釈しているからです。 <br>を改行として扱いますので、ソースを見て確認してみてください。

jyuu
質問者

補足

言葉が足りませんでした。ケース2で Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 ) と表示されないのはなぜなのでしょうか?

関連するQ&A

  • 配列に新しい値を加える

    配列に新しい値を加えようとしているのですが、どうもうまくいってくれません。array_push を使用してもうまくいかないのでどうしたものかと悩んでいます。 $fruits = "banana melon orange strawberry"; $fruits = explode (' ', $fruits); $fruits = array_push ($fruits, "apple"); print_r($fruits); とすると 5 が表示されます。一方3行目を消すと Array ( [0] => banana [1] => melon [2] => orange [3] => strawberry ) が表示されます。 配列に新しい値を加えるやり方をご存知の方おられましたらご教授くださるとうれしく思います。

    • ベストアンサー
    • PHP
  • 配列にきちんと入れる方法

    txtの行数字が合っている数字だけ(7.6.4.1)抜いて上から順に配列に入れたいのですが、何か微妙に違う結果になります。 7 7 10 7 6 6 4 4 5 4 9 4 1 1 2 1 $abc=file("1.txt"); for($l=0;$l<count($abc);$l++){ $def=explode("\t",$abc[$l]); if($def[0]==$def[1]){ $ll=array($def[0]); print_r($ll); }} Array ( [0] => 7 [1] => 6 [2] => 4 [3] => 1 ) 上記のようなブラウザ結果にしたいのですが、別々に配列が表示されてしまいます。どう記述すればこの結果になるでしょうか?ご教授ください。

    • ベストアンサー
    • PHP
  • 連想配列を配列に入れるには

    下記のような連想配列を配列に入れる簡単な方法はありますか。 array("a"=>"1","b"=>"2") 期待する結果(print_r) Array ( [0] => Array ( "a" => "1" ) [1] => Array ( "b" => "2" ) ) 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • [PHP]配列におけるインデックスの考え方

    $scores = [10, 50, 30, 20]と言った配列があるとします。 配列内の10の値を取りだそうとすれば print $scores[0]; とすればブラウザに10の値が表示されます。 というか、配列というのは、[0][1][2][3]…と数えるものだと思っていました。 今、array_fill()関数について学習しています。 $prices = array_fill(0, 5, 10); としてprint_rで出力すると Array ( [0] => 10 [1] => 10 [2] => 10 [3] => 10 [4] => 10 ) と自分で理解できる範囲の結果が表示されます。 ところが、 $prices = array_fill(-2, 5, 10); をprint_rで出力すると以下のように返ってきます。 Array ( [-2] => 10 [0] => 10 [1] => 10 [2] => 10 [3] => 10 ) 単純に考えると、以下のように返ってこないのはなぜなのでしょうか? Array ( [-2] => 10 [-1] => 10 [0] => 10 [1] => 10 [2] => 10 ) また $prices = array_fill(5, 5, 10); と記述すると、 Array ( [5] => 10 [6] => 10 [7] => 10 [8] => 10 [9] => 10 ) と返ってきます。 配列のインデックス、添字を名前や商品名にして連想配列が出来るのはわかります。 (1)マイナス値からはじめた場合、なぜ[-2][-1][0]…のように返ってこないのはなぜでしょうか? (2)配列の添え字、インデックスが、[5]ではじまり[6][7][9][10]…とすることに 何か意味があるのでしょうか? $prices = [10, 10, 10, 10, 10]のような記述があった場合、初学者には[0]からはじまっているからこそ array_spliceなどでキー名がわからずとも、配列を操作を容易にできるのではないかと思ってしまいます。 上記2点、配列内でのマイナス値の扱い方、配列の添字が[0]以外からはじまる理由がよくわかりません。 分かる方いらっしゃいましたら教えて下さい。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列データを置き換える

    こんばんは。お恥ずかしい質問かと思いますが、配列の操作に関して分からないことがあっての質問です。 $array = array("ああ", "いい", "うう", "おお", "かか", "ええ"); という配列をasort()関数を使うことで、 Array ( [0] => ああ [1] => いい [2] => うう [3] => おお [4] => かか [5] => ええ ) が、 Array ( [0] => ああ [1] => いい [2] => うう [5] => ええ [3] => おお [4] => かか ) というふうになるかと思いますが、インデックスも書き換えるには、どのようにすれば宜しいのですか? 上記の例の場合、以下のように行っているのですが、 $array = array("ああ", "いい", "うう", "おお", "かか", "ええ"); print_r($array); asort($array); print_r($array); $arrayをfor文にて繰り返し表示をさせたとき、書き換えたインデックス順で表示させたいことから、以上のような流れでインデックスを書きけることが出来れば?と思っての質問です。 他にいい方法があれば、そちらも併せてアドバイスいただけたら嬉しいです。宜しくお願い致します。。

    • ベストアンサー
    • PHP
  • 配列の値について

    度々の質問で恐縮です。長時間かけて試行錯誤するものの一向に解決せず、お知恵をお借りできればと思い投稿させて頂きました。 ---------------- for ($i = 0; $i <= 2; $i++) { // 3回ループです。 if (is_uploaded_file(@$_FILES["img"]["tmp_name"][$i])) { $pre = "s_"; $imgname[$i] = basename($_FILES['img']['name'][$i]); $imgfile[$i] = $imgdir . $imgname[$i];   << 中略(色々な処理) >> if (preg_match('/\.jpg$/', $imgname[$i]) > 0) { ImageJpeg($img_out[$i], $imgdir.$pre.$imgname[$i] ); $img_thumb = array($i => basename($imgdir.$pre.$imgname[$i]));} 【A】} 【B】} 【C】 ----------------- ■上記『$img_thumb』には配列の値を格納していますが、【A】、【B】の位置で『print_r』を実施したところ、Array ( [0] => ××.jpg ) Array ( [1] => ○○.jpg )Array ( [2] => △△.jpg ) のように配列データが格納されていますが、【C】の位置では、Array ( [2] => △△.jpg ) だけしか表示されません。 これを【C】の位置でも全て表示できるようにするにはどうすればよいか、何かアドバイスをぜひともよろしくお願いいたします。 分かりにくくて申し訳ありません。

    • ベストアンサー
    • PHP
  • 不要な配列を消したい

    2次元配列で、不要な要素を取り除きたいのですが良い方法が思い浮かばず、どうしたものかと悩んでいます。 一番初めと5番目を消したいのですが、preg_match で日付の2006にマッチしない要素をunsetしてみましたがうまくいきませんでした。 $data = array ( array('<br>'), array("2006 03 22", test), array("2006 03 23", test2), array("2006 03 25", test3), array('') ); $pattern = '/2006/'; foreach($data as $key => $value) { if(preg_match($pattern, $value[$key])) { unset($data[$key]); } } もし方法をご存知のかたおられましたらよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列のカウント

    こんにちは 初歩的な質問だとは思うのですが…教えて下さい 【 1.以下のような配列を作る 】 $array = array( "1-aaa", "2-aaa", "2-bbb", "2-ccc" ); 【 2.本日の日付を取得 】 $today = date("d",time()); 【 3. arrayの件数分forで回す 】 for ($i = 0; $i < count($array); $i++) { 【 4.explodeで分解 】 $items = explode("*",$array[$i]); 【 5.日付と配列[0]が一致した時に項目表示 】 if($today == $items[0]){ print $items[1]; } という処理を行った時に if($today == $items[0]) に該当するデータ件数というのは 求めることが出来ないものなのでしょうか (今日が2日として、この場合は「3」が欲しい) 前からこういう状況下で該当する件数を求めたい時があっても どうしたらよいのかわからなくて諦めていたのです 絶対ムリなら諦めるので、出来るのかどうか教えて頂けますか?? もし可能であれば、求め方のヒントも頂けると助かります よろしくお願い致します!!

    • ベストアンサー
    • PHP
  • 二次元配列が上手くいきません

    Sample.txt 2 2 10 01 php <?php $handle = fopen('sample.txt','r'); // ファイルを開いてファイルポインタを取得 $contents = fread( $handle, 1024 ); // ファイル内容を1024バイト分読み込んで変数に格納 fclose( $handle ); // ファイルを閉じてファイルポインタを破棄 $start_part=array_map("trim",explode("\n",$contents));//$start_partは初期画像の行の配列 改行を削除 $r = $start_part[0];//横サイズを読み込む $g = $start_part[1];//縦サイズを読み込む $start[][]=""; //g行r列の2次元配列を作成 start[x][y],end[x][y]; for($j=0;$j<$g;$j++){ for($i=0;$i<$r;$i++){ $start[$i][$j] = substr($start_part[2+$j],$i,1); } } print_r($start); ?> xamppでphpの勉強をしている初心者です。 理想では$start[0][0]=1 $start[0][1]=0 $start[1][0]=0 $start[1][1]=1となってほしいのですが、 Array ( [0] => Array ( [0] => ) ) としか表示されず困っています。どこを直せばよいのでしょうか。どこが良くないのでしょうか。 ご教授ください。よろしくお願いします。

    • 締切済み
    • PHP
  • 配列n番目のデータの取得をしたい。

    初歩的な質問で恐縮です。 2次元配列形式で作った CSVファイル moromoro.txtがあります。 <?php $CsvData = fopen("./moromoro.txt","r"); $line=fgetcsv($CsvData,50,"\t"); print_r($line); ?> としてブラウザでみると Array ( [0] => abcd,efgh,kimn,qrst,uvwx)  とデータが入ります。ところが、データを取り出すため、 以下の通り4行目を追加しブラウザで見ても白いページだけになります。 01: <?php 02: $CsvData = fopen("./moromoro.txt","r"); 03: $line=fgetcsv($CsvData,50,"\t"); 04: list($aaa,$bbb)=$line; 05: return $aaa; 06: print_r($aaa); 076: ?>  ---------- 4行目以下を次のように変更しても 04: $ccc[]=$line[2]; 05: print_r($ccc); 06: ?> Array ( [0] => )  とだけが出てデータの取得が出来ません。何故でしょうか? どうすれば、配列n番目のデータを取り出すことができるでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう