• ベストアンサー

配列のindex番目を削除

配列で番号でいれていたのですが unset($Items[$ItemNo]); で 削除したら 飛び番になってしまいます。 自動で採番 される関数ないのでしょうか? foreach をつかえば問題ないのですが for ($i = 0; $i<count($Items); $i++) でやると 困るんです(^_^; 消す場所から、下からコピーしていどうして $ItemNo = 3; for ($i = $ItemNo; $i+1 <count($Items); $i++) { $Items[$i] = $Items[$i+1]; } array_pop($Items); みたいなことしてくれる関数がしりたいです。

noname#13325
noname#13325
  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

array_splice ($Items, 3, 1);

noname#13325
質問者

お礼

うまくいきました。 ありがとうございました m(_ _)m

その他の回答 (1)

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

array_mergeしてはいかが? 配列が数字で添字指定されていた場合、 キーの添字が連続となるように振り直される ようですよ。 http://www.php.net/manual/ja/function.array-merge.php

noname#13325
質問者

お礼

データを結合する時は 使おうと思います ありがとうございました。

関連するQ&A

  • 不要な配列を消したい

    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
  • 空の配列を削除して、詰めていく。

    データベースから値を取ってくるとき、全て、同じ値が入ってくる場合があります。 $a = array(100,100,100,100,100)というような。 これを、array_uniqueで重複している値を削除したのですが、その際、print_rで見ると、 Array ( [4] => 100 ) と表示されました。つまり、キーが0ではなく、4となってしまっています。 array_uniqueで帰ってきた値が複数なら、さらにsortすることで0から始まる配列として並び替えられるのですが、1つしか帰ってこないとsortをしても、キーは変わらないようです。 この値を表示させるとき、countで配列の数を数え、さらにfor文でcountの数だけ回し、print $i;で表示させるようにしているのですが、上記のようにarray_uniqueで1つの値しか帰ってこないと、ページに値がきちんと表示できなくなってしまいます。 これを解決するために、空の要素を削除して、空白でない要素のキーを前に詰めてくれるような関数などを探しているのですが、何か方法などありますでしょうか? Array ( [4] => 100 ) が Array ( [0] => 100 )となるようにしたいのです。 よろしくお願いいたします。

    • 締切済み
    • 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
  • 配列の初期化

    表題の件で質問があります。 //------------------------------------// $A_array = array("1", "2", "3"); $B_array = array("9", "8"); for($cnt=0;$cnt<count($A_array);$cnt++){ $test[] = $A_array[$cnt]; } for($cnt=0;$cnt<count($B_array);$cnt++){ $test[] = $B_array[$cnt]; } ※わかりやすいようの簡単に書いてみました。 //------------------------------------// 上記の処理の場合配列testには ("9", "8", "3")となってしまい、 ("9","8")のデータを取得できません。 簡単に言うと配列名を使いまわししたいと考えています。関数かなにかで配列の中身を初期化するような ものはありますでしょうか?

    • 締切済み
    • PHP
  • 配列の値を集めた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
  • 配列のソートと削除

    String型のstrToRemoveで与えられた文字列を配列から探し、あればそれ以降の配列の数字をすべて左にシフトします。 なので配列の大きさは1小さくなります。その結果の配列をreturnで返します。 例) ({"A","B","C","D","B"}, "B")配列1にBがあるのでそれ以降の文字列をすべて左にシフト→ {"A","C","D","B"} ({"A","B","C","D","B"}, "A") 配列0にAがあるのでそれ以降の文字列を左にシフト→ {"B","C","D","B"} プログラムは以下のように組みました。 public class ArrayFun { public String[] oneRemoved(String[] array, String strToRemove) { int count = 0; for (int i = 0; i < array.length; i++) {      if (strToRemove.equals(array[i]) && count == 0) {        for (int j = i; j < array.length - 1; j++) {          array[j] = array[j + 1];        }          count++;      } }      array = new String[array.length - 1];      array[array.length - 1] = null;      return array; } } ちなみにcountは、一度シフトすればもう同じ文字列がそれ以降の配列にあってもシフトはしないので、countでシフトしたかどうかを判断しようと思い付けました。 これでテストメソッドも作るのですが、 import static org.junit.Assert.*; import org.junit.Test; public class ArrayFunTest { @Test public void testoneRemoved() { ArrayFun af = new ArrayFun(); String[] a1 = {"A","B","C","D","B" };//元の配列 String[] a2 = {"A","BB","CCC","DDD","B"};//元の配列 String[] a3 = {"B","C","D","B"};//シフト後の配列 String[] a4 = {"A","BB","CCC","DDD","B"};//シフト後の配列 assertEquals(a3, af.oneRemoved(a1, "A")); assertEquals(a4, af.oneRemoved(a2, "NotHere")); } } 以上のように組むと、assertEqualsの真ん中に黒線が入って自動的に@SuppressWarnings("deprecation")が加えられてしまいます。 実行結果は、({"A","B","C","D","B"}, "A") の例だと、配列0にB が入るはずがnullになっている、とエラーがでます。 どのようにしたら正常に動かせるでしょうか?宜しくお願いします。

    • ベストアンサー
    • Java
  • 配列をhtmlで参照

    javascriptで作成した配列の要素をhtmlのセレクトボックスの値として 参照したいんですが、どのようにすればいいんでしょうか? <html><body> <select name="セレクト"> <option >セレクトボックス <option value="1st item">1st item //ここに配列items[]の値を代入したい <option value="2nd item">2nd item <option value="3nd item">3nd item <option value="4nd item">4nd item <option value="5nd item">5nd item </select><br> <script language="Javascript"> function Item(name, count) { this.name = name this.count = count } function cmp_func(lhs, rhs) { return rhs.count - lhs.count } items = new Array(10) items[0] = new Item("apple", 12) items[1] = new Item("orange", 34) items[2] = new Item("banana", 15) items[3] = new Item("grape", 99) items[4] = new Item("strawberry", 7) items[5] = new Item("rasberry", 55) items[6] = new Item("blueberry", 22) items[7] = new Item("lemon", 4) items[8] = new Item("nable", 33) items[9] = new Item("pear", 44) items.sort(cmp_func) for (i=0; i<items.length; i++) document.write(items[i].count, ":", items[i].name,"<br>") </script></body></html> たびたび質問すいませんが、よろしくご教授願

  • PHPの再帰関数について

    下記のように関数を作りましたが、思うような結果が出ません。 function saiki($array){ if(count($array) === 1){ return $array; } else { array_pop($array); saiki($array); } } var_dump(saiki(array('いちご', 'みかん', 'りんご', 'すいか'))); /* 欲しい結果 /* array(1) { /* [0]=> /* string(9) "いちご" /* } /* /* /* 実際の結果 /* array(4) { /* [0]=> /* string(9) "いちご" /* [1]=> /* string(9) "みかん" /* [2]=> /* string(9) "りんご" /* [3]=> /* string(9) "すいか" /* } count($array) が 1 じゃなければ array_pop($array) した配列を引数として、再帰的に saiki($array) しているつもりなのですが。。。 array_pop($array) じゃなく unset($array[count($array) - 1]) みたいなことをしても結果は一緒でした。 どうすれば欲しい結果がとれるか(count($array) が 1 以外なら再帰的に繰り返す)、どなたかご教授ください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 4つの異なる二次配列を関数で表示

    二次配列と関数の問題です。 [日本語訳]displayArray7を呼ぶ関数を書きなさい。その関数は二次配列を一つの引数として受け取り、その内容を画面に表示すべきである。その関数は下のいずれの配列でも動作するようにしなさい。プログラムを書いてその関数を評価しなさい。 4つの配列とも一次の項(?)の数が違うじゃないですか。しかも関数を呼ぶときは配列[5][7]などはいらないですよね? (displayArray7(hours);だけ) だから、各配列の一次の項がどんな数字を持っているのかを関数displayArray7に送ることが出来ず、どのように表示してよいのか分かりません(今は一応最大値50で表示しています)。どのようにすればよいのでしょうか? 教えてください。お願いします。 #include <iostream> using namespace std; void initialize(int array[][7]); void displayArray7(int array[][7]); int main() { int hours[5][7]; int stamps[8][7]; int autos[12][7]; int cats[50][7]; initialize(hours); displayArray7(hours); initialize(stamps); displayArray7(stamps); initialize(autos); displayArray7(autos); initialize(cats); displayArray7(cats); return 0; } void initialize(int array[50][7]) { int i, j; for(i=0; i<50; i++) for(j=0; j<7; j++) array[i][j] = 0; } void displayArray7(int array[][7]) { int i, j; cout << "\t1\t2\t3\t4\t5\t6\t7" << endl << endl; for(i=0; i<50; i++){ cout << i+1 << ":"; for(j=0; j<7; j++){ cout << "\t" << array[i][j]; } cout << endl << endl; } }

専門家に質問してみよう