プロが教えるわが家の防犯対策術!

お世話になります、PHP初心者です。

連想配列から「0(ゼロ)」やNULL以外の数値を受け取りたいのですがどのように記述するのか分かりません。経験豊富な諸先輩方には低レベルで失礼かと思いましたがお知恵をお借りしたく、質問させて頂きます。

PHP+Mysqlにて子ども服の料金の最安値と最高値を表示させようとしています。
子供服はサイズによって価格がちがい、サイズは60cmから10cmきざみで~130cmまであります。
服によって80~120cmまでのように全サイズ無い物がほとんどです。

そこで、最大値はmax関数で出るのですが、最小値がmin関数で求めた時、当然ですが「0」が表示されます。
この「0」の表示を何とか「1」以上の数値に限定して表示させることはできないでしょうか。

サイズ・60・70・80・90・100・110・120・130
     × × × ○  ○ ○  ○ ×

$price = array(0,0,0,2000,2000,2500,3000,0,);


分かりずらい説明で本当に申し訳ございませんが宜しくお願いします。




環境
Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
phpMyAdmin
バージョン情報: 3.5.2.2, 最終安定バージョン: 4.0.4.1

A 回答 (5件)

$price = array_filter($price);

    • good
    • 0
この回答へのお礼

ありがとうございます。
ズバリこれで解決しました、非常に参考になりました。

お礼日時:2013/07/29 14:32

SQL文修正



$stmt = $pdo->query('SELECT `size`, `price` FROM `info` WHERE `price` > 0');
    • good
    • 1
この回答へのお礼

ありがとうございます。
こういうやり方もあるのですね、非常に参考になりました。

お礼日時:2013/07/29 14:32

yambejpさんの方法をSQL実行と共に1発で実現するならこんなふうに書きます。



clothesデータベースのinfoテーブルが

id| size | price
0 |60 | 0
1 |70 | 0
2 |80 | 0
3 |90 | 2000
4 |100 | 2000


のような構造であると仮定します。(size, price以外のカラムはあっても無くてもいい)


try {

$pdo = new PDO('mysql:dbname=clothes;host=127.0.0.1;charset=utf8');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->query('SELECT `size`, `price` FROM `info`');
$results = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);

var_dump($results);

} catch (Exception $e) {

echo 'エラー: ' . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8');

}


PDOの使い方をご存じなければ調べてみてください。

どの API を使うか
http://www.php.net/manual/ja/mysqlinfo.api.choos …

この中ではPDOが最もオススメできます。
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
としてSQLエラー時にも例外をスローさせることが出来るのはPDOだけの強みです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
PDOは便利ですね。こういうやり方もあるのですね、非常に参考になりました。

お礼日時:2013/07/29 14:39

サイズのあるものだけ配列に収納しておけばよいでしょう



<?PHP
$price = array(90=>2000,100=>2000,110=>2500,120=>3000);
print "MIN:".min($price)."<br>";
print "MAX:".max($price)."<br>";
?>
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考にして解決できました、こういうやり方もあるのですね、非常に参考になりました。

お礼日時:2013/07/29 14:40

$price = array_diff(array(0,0,0,2000,2000,2500,3000,0,),array(0));



で、0 が削除できます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
非常に参考になりました。こんなに短い文で解決するとは!驚きです

お礼日時:2013/07/29 14:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!