• ベストアンサー

PHP 配列について

PHPで簡単なプログラムを作っています。 上手い方法があれば教えてください。 例えば $arr = array(); $arr(0) = "ABC"; $arr(1) = "DEF"; $arr(2) = "GHI"; $arr(3) = "JKL"; $arr(4) = "MNO"; この様な配列があり、これを以下の様に「特定のデータを削除し空いているキーを詰めたい」場合どうしたら良いのでしょうか? この場合は"DEF"を削除。 $arr(0) = "ABC"; $arr(1) = "GHI"; $arr(2) = "JKL"; $arr(3) = "MNO"; アドバイスお願いします。

  • PHP
  • 回答数4
  • ありがとう数6

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

  • ベストアンサー
回答No.3

<?php $arr = array(); $arr{0} = "ABC"; $arr{1} = "DEF"; $arr{2} = "GHI"; $arr{3} = "JKL"; $arr{4} = "MNO"; //最初にDEFが見つかった番号 //なければfalse $hoge = array_search("DEF",$arr,1); //何故こういう書き方をしているかはarray_spliceのマニュアルを見ればわかるかと if($hoge !== false){ array_splice($arr,$hoge,1); } print_r($arr); ?>

NORI-AYU
質問者

お礼

ありがとうございます。 サンプルがまさにやりたかった事です。 助かりました。

その他の回答 (3)

  • umota
  • ベストアンサー率46% (150/324)
回答No.4

ANo.1 です 2 番目(添字=1)の要素を削除する例です。 $arr = array_splice($arr, 1);

NORI-AYU
質問者

お礼

ありがとうございます。 度々すいませんでした。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

$arr = array_values($arr); でいいと思います(下記のソースで確認しました)。   <?php   $arr = array();   $arr[0] = "ABC";   $arr[2] = "GHI";   $arr[3] = "JKL";   $arr[4] = "MNO";   $arr = array_values($arr);   print_r($arr);   ?> result:   Array ( [0] => ABC [1] => GHI [2] => JKL [3] => MNO )

NORI-AYU
質問者

お礼

ありがとうございます。 試してみたのですが、上手くいきませんでした。 $arr = array(); $arr(0) = "ABC"; $arr(1) = "DEF"; $arr(2) = "GHI"; $arr(3) = "JKL"; $arr(4) = "MNO"; $arr(1) = ""; $arr = array_values($arr); print_r($arr); 結果: Array ( [0] => ABC [1] => [2] => GHI [3] => JKL [4] => MNO ) お願いいたします。

NORI-AYU
質問者

補足

ごめんなさい。 $arr = array(); $arr(0) = "ABC"; $arr(1) = "DEF"; $arr(2) = "GHI"; $arr(3) = "JKL"; $arr(4) = "MNO"; unset($arr(1)); $arr = array_values($arr); で出来ました。 ありがとうございました。

  • umota
  • ベストアンサー率46% (150/324)
回答No.1

> どうしたら良いのでしょうか? マニュアル(array_splice)を読む。

NORI-AYU
質問者

お礼

ありがとうございます。 マニュアル(array_splice)を読んだのですが、今回の場合にどう使うかが分かりません。 簡単で良いのでサンプルを頂けるとありがたいです。 お願いします。

関連するQ&A

  • 二次元配列の分割

    よろしくお願いします。 $hoge = array( "one" => array("abc" => "100", "def" => "200", "ghi" => "300"), "two" => array("abc" => "110", "def" => "210", "ghi" => "310"), "three" => array("abc" => "120", "def" => "220", "ghi" => "320") "four" => array("abc" => "130", "def" => "230", "ghi" => "330") ); というような配列があったとき、 abcが110以下のときと、110より大きい場合で分割した配列を 用意したいと考えてます。 具体的には、 $hoge1 = array( "one" => array("abc" => "100", "def" => "200", "ghi" => "300"), "two" => array("abc" => "110", "def" => "210", "ghi" => "310"), ); と $hoge2 = array( "three" => array("abc" => "120", "def" => "220", "ghi" => "320") "four" => array("abc" => "130", "def" => "230", "ghi" => "330") ); に分割したいと考えています。 どのように記述すればよいのでしょうか?

    • ベストアンサー
    • PHP
  • エクセルで,スペースのある文字列を列ごとに分けるには?

    例えば abc def ghi jkl mno pqr という文章があったとします。 それを |abc|def|ghi| ------------- |jkl|mno|pqr| みたく,スペースのあるところで区切るにはどのようにすればよいでしょうか。教えてください。

  • excelの重複データの削除方法。

    excel2003で重複する値を自動的に削除する方法を探しています。 現在、以下のような手順で作業をしています。     A   B   C 1 ○○○ 100 ABC 2 ▼▼▼ 200 DEF 3 ◇◇◇ 300 GHI 4 ■■■ 400 JKL 5 △△△ 500 MNO ↑の元データに      A   B   C 1 ○○● 100 ABC 2 ◇◆◇ 300 GHI ↑のデータを追加(貼り付け)して並び替えをすると      A   B   C 1 ○○○ 100 ABC 2 ○○● 100 ABC 3 ▼▼▼ 200 DEF 4 ◇◇◇ 300 GHI 5 ◇◆◇ 300 GHI 6 ■■■ 400 JKL 7 △△△ 500 MNO というデータが出来るとします。 「C列の値を基準」として、重複している箇所を検出・削除し (上の例で言えば、1・2・4・5の行。)      A   B   C 1 ▼▼▼ 200 DEF 2 ■■■ 400 JKL 3 △△△ 500 MNO というデータにしたいと考えております。 重複した値のどちらか一方を残す、という方法ではなく、 重複した値の全てを削除する、という方法が解りません。 手作業で1つ1つ削除していけばいいのですが、本物のデータは何千件とあるので 手作業では時間が掛かりすぎてしまいますので…。なにかよい方法はないでしょうか? 簡単な方法であれば大変助かりますが、マクロなどを使用する方法でもかまいませんのでご教授下さい。 よろしくお願い致します。

  • データをブロックごとに並べ替えるスクリプト

    データをブロックごとに移動して並べ替えたいのですが、 うまくいくスクリプトが書けず困っています。 APR_A----- abc 1 def 2 APR_B----- abc 3 def 4 APR_C----- abc 5 def 6 APR_A----- ghi 1 jkl 2 mno 3 APR_B----- ghi 4 jkl 5 mno 6 APR_C----- ghi 7 jkl 8 mno 9 のようなフォーマットのデータがあります。 これを以下のようにフォーマットを変えたいのですが、 awkを使ってどのようにスクリプトを書いたらよいでしょうか。 元データの中で、区切りの行は常にAPR_で始まっています。 APR_で始まる行に来たら次の列に移って2列目のみprint というのを繰り返し、APR_Aに戻ってきたら、 1列目(abc,defなど)、2列目ともprintして同様に繰り返す。 各ブロックの行数はまちまちです。(最初のブロックのように2行のブロックもあれば2番目のブロックのように3行のもあります) rowtitle APR_A APR_B APR_C abc 1 3 5 def 2 4 6 ghi 1 4 7 jkl 2 5 8 mno 3 6 9 分かりにくい文章ですが、理解していただけることを願っています。 よろしくお願いします。

  • 秀丸の検索・置換の正規表現の最短一致の挙動が変です

    秀丸の検索または置換の正規表現の 最短一致での挙動ですが、 /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz の先頭にカーソルを置いた状態で、 (質問1) 正規表現のチェックボックスをチェックして /.*$ で検索すると /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されると思うのですが 実際には /def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されてしまいます。 なぜでしょうか。 (/abc/.*$とするとカーソルがある /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz ではなく次の行以降の /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されてしまいます?) (質問2) 正規表現のチェックボックスをチェックして /.*?$ で検索すると最短一致となるため /uvw.xyz が検索されると思うのですが 実際には /def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されてしまいます。 なぜでしょうか。 (なお、/[^/]*$では/uvw.xyzが検索されます)

  • 文字列を配列にしたい

    お世話になります。 PHP4.3.9を利用しているのですが、以下のような文字列を分割して、求める形の配列に入れたいのですが、何か良い方法はありますでしょうか? ■文字列 abc=123&def=456&ghi=789 ■このような形にしたいと思っています↓ $hoge = array(   "abc"=>"123",   "def"=>"456",   "ghi"=>"789" ) ヒントだけでも結構ですので、ご教示いただけると幸いです。宜しくお願いします。

    • ベストアンサー
    • PHP
  • QUERY_STRINGを連想配列に入れたい

    よろしくお願いします。 $_SERVER['QUERY_STRING']の値 q1=abc&q2=def&q3=ghi を連想配列に入れたいと思います。 $array = array("q1"=>"abc","q2"=>"def","q3"=>"ghi"); どのようにしたらQUERY_STRINGの値を連想配列に入れられますか?

    • ベストアンサー
    • PHP
  • エクセル セルの並べ換え方法について教えて下さい

    縦 A列とB列に入力してある内容を縦一列にまとめて上下二段にする方法、 どなたか教えて下さい! A列   B列 abc def ghi jkl    mno pqr これを A列 abc def ghi jkl mno pqr という様にしたいのです。   

  • 複数種類の括弧でくくられてない文字をマッチングさせたい

    Perlの正規表現で質問です。 複数種類の括弧、たとえば()、【】、[]などで囲まれていない文字をマッチングさせたいのです。 括弧は1行に複数ある可能性があり、ない場合もあります。 (abc)【def】ghi【jkl】 だとghiの部分。 【abc】【def】(ghi)jkl(mno) だとjklです。 頭に必ず括弧が来たり、括弧が一回だけなら括弧閉じるの種類をor検索ではじけるのですが、何回くるかわからないのでどうしたらいいか困っています。 方法がありましたら教えてください。

    • ベストアンサー
    • Perl
  • VBA:配列の中で文字列が何番目にあるか知りたい

    たとえば Hairetu = Array("ABC","DEF","GHI") としておいて配列から"DEF"が何番目にあるのかを検索する方法はないのでしょうか? よろしくお願いします。

専門家に質問してみよう