条件の書き方がわかりません。 - PHPプロ!Q&A掲示板

1857

  • 100P

条件の書き方がわかりません。

質問日時 / 2009年2月10日 02:49 (最終編集:2月10日 02:53)    回答数 / 9件

Questioner:  yumisaiki  このエントリーをはてなブックマークに追加 

キーワード / どちらかがture の場合   

お世話になっています。
zen-cart のプログラムを加工していて、
http://zen-cart.jp/bbs/viewtopic.php?f=2&t=3738&st=0&sk=t&sd=a&start=15
お陰で表示ができるようになったのですが、

またまた、これをスッキリ書くとどうなるのだろうと思って書いたらエラーになり、
原因がわかりません。

  1. <!-- その1のとき-->
  2. <?php
  3. foreach ($notificationsArray as $notifications){ 
  4. if ($notifications['products_id']==1){
  5. print"なんかかけ";}} ?>

という、簡単なものです。
で、この条件の数字が 2のとき、3のときとあり、

  1. <?php
  2.  foreach ($notificationsArray as $notifications){ 
  3.  // 1か 5のとき
  4.  if ($notifications['products_id'] ==1 :: $notifications['products_id']==5)
  5. { なんか書く}
  6.  
  7. //7か6のとき
  8. else if ($notifications['products_id']7 :: $notifications['products_id'] == 6 ){
  9.  print"なんか書く" ;}
  10.  
  11. //8のとき
  12. else if ($notifications['products_id'] == 8 ){
  13.  print"なんかかく" ;}
  14.       
  15. // 9のときは 
  16. else if ($notifications['products_id'] == 9 ){
  17.  print"なんかかく" ;}      
  18.       }
  19. ?>



としてみたらうまく動きません。一番最初のcodeを繰り返して書いたら表示されますが、なんかイヤなんです。 右か左の条件がtrue だったら処理というのを本を見て書いたのですが、これではないのでしょうか?

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01moochomoochoです。 >>CODE if ($notifications['produc
┃┗A01-1yumisaikiすみません。10日で覚えるPHP5の84Pには :: と書いて
┗A02yakou850moochoさんも書いていますが、 おそらくこのコードは
 ┣A02-1yumisaiki本当です!==じゃなくて =になってます~! やは
 ┗A02-2yumisaikiarray('products_id' => 1) って どういう意味です
  ┗A02-2-1yakou850テストで使ったコードが残ってました。すみません。
   ┗A02-2-1-1yumisaikiすみません。私の頭ではますますわからないのですが、
    ┗A02-2-1-1-1yakou850>$notificationsArray = array(); // $notification
     ┗A02-2-1-1-1-1yumisaiki配列の要素を示すときに使うものですね。そういえば一

回答一覧

並び替え:

A01 満足
answerermoocho [2月10日 03:31]

moochoです。

  1. if ($notifications['products_id'] ==1 :: $notifications['products_id']==5)
とかの「::」って何かと勘違いされていませんか?

シンタックスエラーになる気がしますが。

「1」もしくは「5」としたいのであれば
  1. if ($notifications['products_id'] ==1 || $notifications['products_id']==5)
の「||」です。

コロンは使わないですね。

この意見に回答する

ツリーへ TOPへ

A01-1
replyeryumisaiki [2月10日 13:53]

すみません。10日で覚えるPHP5の84Pには :: と書いているようにしか見えなかったので…。
本当にいつもお世話になります。

この意見に回答する

ツリーへ TOPへ

A02 満足
answereryakou850 [2月10日 10:24]

moochoさんも書いていますが、
おそらくこのコードはなにかしらエラーが起きそうです。
おそらく別なコードを書いていた上で、ここに貼る際に書き換えたのでは
と想像していたりしますが・・・
すでに指摘されている「::」のほかに「$notifications['products_id']= 7」もありますね。
比較ではなく代入になってますよ。

自分なら「値がこれの場合はこの処理」といったコードを書くときにはswitch使ってます。
  1. <?php
  2. $notificationsArray[] = array('products_id' => 1);
  3. foreach ($notificationsArray as $notifications){ 
  4.   switch ($notifications['products_id']) {
  5.     case 1:
  6.     case 5:
  7.       print "1or5";
  8.       break;
  9.     case 6:
  10.     case 7:
  11.       print "6or7";
  12.       break;
  13.     case 8:
  14.       print "8";
  15.       break;
  16.     case 9:
  17.       print "9";
  18.       break;
  19.     default:
  20.       print "異常?";
  21.       break;
  22.   }
  23. }
  24. ?>
こんな感じ。switchにする理由は「自分がif elseifを多用するのをみて混乱するから」。
・・・こんな書き方でもいけるんじゃないでしょうかということで。

この意見に回答する

ツリーへ TOPへ

A02-1
replyeryumisaiki [2月10日 13:55] (最終編集:2月10日 13:58)

本当です!==じゃなくて =になってます~! やはりドジですねぇ。

そうですね。書いてるうちにこんがらがってしまいますね。 shith で今回がんばってみます。
使ったことないと、やはりイザというときに浮かばないものですね。
知っていましたが、まったくおもいつきませんでした。

これからもよろしくお願いします。

この意見に回答する

ツリーへ TOPへ

A02-2
replyeryumisaiki [2月10日 14:24]

array('products_id' => 1) って どういう意味ですか??
終了しておいてすみません。
疑問に思うともうダメで。

この意見に回答する

ツリーへ TOPへ

A02-2-1
replyeryakou850 [2月10日 14:27]

テストで使ったコードが残ってました。すみません。

  1. $notificationsArray[] = array('products_id' => 1);
はきちんと書いていくと
  1. $notificationsArray = array();
  2. $tmp = array();
  3. $tmp['products_id'] = 1;
  4. $notificationsArray[] = $tmp;
くらいになりますかね。
要は連想配列を作って、それを要素にもつ配列を構築ってかんじです。

この意見に回答する

ツリーへ TOPへ

A02-2-1-1
replyeryumisaiki [2月10日 14:41] (最終編集:2月10日 14:42)

すみません。私の頭ではますますわからないのですが、

$notificationsArray = array(); // $notificationsArray を 配列にいれます
$tmp = array();                // $tmp を配列に入れます
$tmp['products_id'] = 1;  // $tmp の 要素 products_id が1です。
$notificationsArray[] = $tmp;  // 配列に入った$notificationsArray[] は $tep で1です。


ということで、これはなんなのでしょうか??

=>1 の意味がいったい何の比較演算子と思えばいいのかと。 
不思議な質問ですみません。

答えよがなかったら無視してください。 すみません。

この意見に回答する

ツリーへ TOPへ

A02-2-1-1-1 満足
replyeryakou850 [2月10日 14:50]

>$notificationsArray = array(); // $notificationsArray を 配列にいれます
>$tmp = array();                // $tmp を配列に入れます

まずここを訂正。「いれる」のではなく「配列として初期化」です。
「入れる」の場合はすでにある配列に要素を追加。
「配列として初期化」は変数を要素を持たない配列としてリセット。

ここだと
1行目:配列として初期化
2行目:配列として初期化
3行目:入れる
4行目:入れる

ちなみに全体の結果としては「2次元配列ができる」というコードです。

>=>1 の意味がいったい何の比較演算子と思えばいいのかと。 
なんというのでしょうかね・・・代入演算子ともちょっと違いますし。

配列に関するページを出しておきます。
http://jp2.php.net/manual/ja/language.types.array.php
array()で指定する場合にはこういったコードが指定できます。
そしてよくみかけますので。

この意見に回答する

ツリーへ TOPへ

A02-2-1-1-1-1
replyeryumisaiki [2月10日 14:54] (最終編集:2月10日 14:58)

配列の要素を示すときに使うものですね。そういえば一番最初のところにありました…。

初期化と配列に入れるのはまったく違いますね! すっかり忘れています。

いや ホンマに すぐ忘れていしまい、勉強しても勉強してもというかんじなんです。
いつもお恥ずかしいです。
ありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)