• ベストアンサー

in_array

$a=array("あ"); $b= "あ" $c=in_array($a,$b) if( この処理の時に、あの前と後の値を指定したい場合なんて書きますか? (2)あが2つ連続であった場合は違う処理をしたいです。その場合どう書けば良いですか?

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

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

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

in_arrayはあるかないかのチェックだからarray_searchを使えば? <?PHP $a=array("i","j","k"); $b= "i"; $c=array_search($b,$a); print $b."がヒットしたのは、".$c."番目のデータ<br>\n"; print "前のデータは".($c>0?$a[$c-1]:"ありません")."<br>\n"; print "後のデータは".($c<count($a)?$a[$c+1]:"ありません")."<br>\n"; ?> 前と後がないデータをどうしたいのでしょうか? >あが2つ連続であった場合は違う処理をしたい 常識的には再帰的な処理で行うか、最初のヒットでやめちゃうのが妥当。 連続であった場合どうしたいの? $a=array("i","j","j","k"); $b= "j"; 加えて連続ではない場合どうしたいの? $a=array("i","j","k","j","l"); $b= "j";

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

補足

回答ありがとうございます。ちょっと特殊なプログラムでして、グラフを作成してます。0だとグラフが途切れる為、前後で割って、その値を代入したいのです。00と0が続いたら割り方を変えねばなりませんし、そういう意味でお聞きしました。アドバイス等あればお願い致します。

その他の回答 (1)

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

関連するQ&A

  • in_array関数について

    in_array関数についての質問です。 下記のように$data_baseにある値が入っているかどうかを調べて、処理を実行するようなものを書きました。 $data_baseに東北地方の県名が入っているかどうかを調べるものです。 $data_base = array('青森県', '岩手県'); $prefecture[tohoku] = array('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県'); $prefecture[kanto] = array('茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '東京都', '神奈川県'); //パターン1 if(in_array($prefecture[tohoku], $data_base)){ $output .= "東北地方"; } //パターン2 if(in_array(array('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県'), $data_base)){ $output .= "東北地方"; } //パターン3 if(in_array('青森県'), $data_base)){ $output .= "東北地方"; } しかし、パターン1とパターン2はif文の中の処理が実行されず、パターン3のみ実行出来ました。 エラー文などは出ていないので構文自体は間違いないと思うのですが…。 パターン2についてはここを見ました。 http://search.net-newbie.com/php/function.in-array.html PHPのVersionは5.2.6です。 in_array関数については色々調べてみたのですがどうしてもわかりません。 他の方法や、間違っている場所などありましたらよろしくお願いします。

    • ベストアンサー
    • PHP
  • arrayである値を持った要素のみを削除するすっきりした方法。

    PHP4で,ある値を持った要素のみを削除したarrayをかえしたいのですが,たとえば,[d]と[e]をいう値をもった要素を削除したい場合, $a = array("a", "b", "c", "d", "e"); $eraseitem = array("d", "e"); $new_a = array(); foreach($a as $value); { if (!in_array($value, $erasesitem)) { $new_a[] = $value; } } とすれば,削除できますが,ほかに何かいい方法はないでしょうか。(デフォルトの関数などを使用してすっきりとできないのでしょうか。) 詳しい方,よろしくお願いします。

    • ベストアンサー
    • PHP
  • array_mapの再帰処理がうまく行かない

    長文で失礼します。 array_mapでの再帰処理がうまく行かないのでどこが間違っているか教えてください。 まず、このような配列があります。配列の中に配列があります。 $ary = array(1, 2, null, array("a", null, "c")); この配列の中のnullを"なし"という文字列に変換したいです。 array_mapを使って再帰的にやってみました。 まずはうまく行ったコードから。 ------------------------------------------------------ $ary = array(1, 2, null, array("a", null, "c")); var_dump(null2Nashi($ary)); // nullを"なし"に置換する関数 function null2Nashi(  $in_array ){  if(is_array($in_array)){   return array_map("null2Nashi", $in_array);  } else {   if ($in_array === null){    $in_array = "なし";   }   return $in_array;  } } ------------------------------------------------------ 結果はnullが"なし"に変換されました array (size=4)  0 => int 1  1 => int 2  2 => string 'なし' (length=6)  3 =>   array (size=3)    0 => string 'a' (length=1)    1 => string 'なし' (length=6)    2 => string 'c' (length=1) そしてこの"なし"をコード内で指定するのではなく引数で指定したいと思って無名関数を使って以下のコードにしました。 ------------------------------------------------------ $ary = array(1, 2, null, array("a", null, "c")); var_dump(null2Str($ary, "なし")); // nullを指定文字列に置換する関数 function null2Str(  $in_array, // null値を含む配列  $in_str // null値を変換したい文字列 ){  $n = function($n_array) use($in_str){   if(is_array($n_array)){    return array_map($n, $n_array); //…(1)   } else {    if ($n_array === null){     $n_array = $in_str;    }    return $n_array;   }  };  return $n($in_array); } ------------------------------------------------------ 結果はnullは何も変換されませんでした。 array (size=4)  0 => int 1  1 => int 2  2 => null  3 =>   array (size=3)    0 => string 'a' (length=1)    1 => null    2 => string 'c' (length=1) どうやら(1)のarray_mapが動作していないようです。要素を分解せずに$nの無名関数に渡さずにそのまま第2引数を返しているだけみたいです。 何か対応方法があるでしょうか? どうぞよろしくお願い致します。

    • ベストアンサー
    • 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
  • Array配列について教えてください。

    重複を防止する為に当サイトにて伝授頂きました。 付きましては、下記コードの c_in = Array("A1", "A2", "A3", "A4", "A5") '//処理対照セル名を列記(入力セル) c_cmp = Array("A1", "A2", "A3", "A4", "A5") '//比較対照セル名を列記(参照セル) の Array("A1"・・・) 部分を A1:A500 若しくは A列全体 としたいのですが、方法はありますでしょうか? 宜しくお願いいたします。 ・・・コード・・・ Sub Code_Check(s_ad As String) Dim st As Worksheet, rng As Range, flag As Boolean Dim i As Long, s, c_in, c_cmp Set rng = ActiveSheet.Range(s_ad) On Error Resume Next If rng.Value = "" Then Exit Sub On Error GoTo 0 c_in = Array("A1", "A2", "A3", "A4", "A5") '//処理対照セル名を列記(入力セル) c_cmp = Array("A1", "A2", "A3", "A4", "A5") '//比較対照セル名を列記(参照セル) flag = True i = LBound(c_in) '//処理対照セルかどうかを判定 While flag And (i <= UBound(c_in)) If rng.Address = Range(c_in(i)).Address Then flag = False i = i + 1 Wend If flag Then Exit Sub '//ブック内の全シートについて比較 For Each st In Worksheets For Each s In c_cmp If st.Range(s).Value = rng.Value Then If (st.Name <> ActiveSheet.Name) Or (st.Range(s).Address <> rng.Address) Then MsgBox ("重複エラー!!" & Chr(13) & "" & Chr(13) & "入力した受注番号は当BOOK内に既に存在します!確認して下さい!") Exit Sub End If End If Next s Next st End Sub

  • array_combineがうまくいかないので、教

    array_combineがうまくいかないので、教えてください ■やりたいこと ・一方の配列をキー、もう一方の配列を値として、新たな配列を生成したい ■現状 $c = array_combine($a , $b);とやると、 Array c (   [1] => 2   [2] => 0   [3] => 0 ) となってしまいます ■元データ Array a (   [0] => 1   [1] => 2   [2] => 2   [3] => 1   [4] => 3   [5] => 1   [6] => 2   [7] => 2   [8] => 3   [9] => 1 ) Array b (   [0] => 0   [1] => 2   [2] => 0   [3] => 2   [4] => 2   [5] => 0   [6] => 2   [7] => 0   [8] => 0   [9] => 2 ) ■質問 ・元データから、下記結果を得るにはどうすればよいでしょうか? Array c (   [1] => 0   [2] => 2   [2] => 0   [1] => 2   [3] => 2   [1] => 0   [2] => 2   [2] => 0   [3] => 0   [1] => 2 ) ・また、array_combineだとなぜ望む結果が得られないのでしょうか? 重複しているから?

    • ベストアンサー
    • PHP
  • in windowと変数

    おそらく初歩的な質問ですいませんが2つ、 つまってしまったのでご教授ください。 var k = new Array("a","b","c"); var i=new Array[[],["1","aa","bb"],["1","aa","bb"],["1","aa","bb"]]; str=k[0];//もしくは0~2 if("i[str]" in window){ //処理 } こういった判定式があったとき 1: 上記では「存在しない」と判定されますがどのように記述したらいいのでしょうか? 2: in windowを否定(i[str]が存在しない場合)という書き方はどのようになるのでしょうか?

  • Arrayしか表示されない。。。

    DBに値が入っているか確認し入っていたら処理を行うスクリプトを作成しているのですが何度やってもArrayしか表示されず困っています。 DBにはoshieteといった値が入っており if($rows['goo'] != ""){ echo "OK"; } といった簡単なものです。しかしOKは表示されずArrayしか表示されません。 どうしたらいいのでしょうか?

    • ベストアンサー
    • 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
  • array関数に指定する引数が可変個の場合どうしたらよいでしょうか?

    array関数に指定する引数が可変個の場合どうしたらよいでしょうか? arrValue = Array("a","b","c") 上記のように、array関数を使ってvariant型の変数に格納したいのですが、 arrayに指定する個数が可変個の場合、どうやったらよいのでしょうか? arrayに指定する値は、他のプログラムによって 配列型変数"aaa"に格納済みです。 aaaに格納される配列数は可変個のため、 dim aaa() as string で定義して、取得できた数によって Redim で再定義しています。 aaaの配列数に応じて、if文などで、 配列数が1個だったら、arrValue = Array(aaa(0)) 配列数が2個だったら、arrValue = Array(aaa(0),aaa(1)) とすればできないことはないのですが、何個までを想定すればよいかも わからないため、困っています。 何かよい方法はないでしょうか?

専門家に質問してみよう