PHP小ネタ集

1Reading Time

配列のカウント

count($array)

Nullの場合は0を返す。

 

数字にカンマを入れる、カンマを取る

number_format関数を使用して、カンマを入れます。

$number = 90000;
echo number_format($number);
//出力結果:90,000

$turn_number = str_replace(',','',$number);
echo $turn_number;
//出力結果:90000

またnumber_format関数は第2引数を指定した場合、小数点以下の桁数が指定できます。指定した桁数よりも数字の桁が多い場合には四捨五入して表示します。

$num = 100000000.123456;
echo number_format($num). "\n";
echo number_format($num, 1). "\n";
echo number_format($num, 2). "\n";
echo number_format($num, 3). "\n";
echo number_format($num, 4). "\n";
echo number_format($num, 5). "\n";
echo number_format($num, 6);

100,000,000
100,000,000.1
100,000,000.12
100,000,000.123
100,000,000.1235
100,000,000.12346
100,000,000.123456

PHPのプログラムで長文を出力する方法

いくつか方法がある中の一つを紹介。配列に入れて、implode()で結合して出力する。

"\r\n"

"<br />"

に変えると要素の後に

<br />

が付く。

        $arr = [
            '<tr><td>テスト文章',
            'だよね</td></tr>',
        ];

        $display = implode("\r\n", $arr);

URLパラメータの分解

parse_url関数を使うことで、「&」で区切られたパラメータを分解することができる。

$param = "source=google&user_id=testuser";
 
// parse_strで分解処理し、第二引数で配列の変数名を指定
parse_str($param, $str);
 
// 配列の要素として出力
print_r($str['source']);
print_r($str['user_id']);

動的にリスト表示した「変更」や「削除」ボタンの値を特定する方法

リスト表示時に「変更」ボタンをそれぞれ配置した場合、どの「変更」ボタンを押されたかを特定する方法です。
他にもいろいろ方法はあると思いますが、一つ紹介します。
foreachなどで、以下のようなリストを複数表示される場合、nameを配列にすることで$_POSTで配列のキーにIDが入ります。

<div class="home-assessment-item3">
   <p><?php echo $value['name']; ?></p>
   <input type="submit" name="approve[<?php echo esc_html($value['ID']); ?>]" value="承認" />
</div>
echo key($_POST['approve']);

あとはkey()関数で押されたIDを取得することができます。

GETでパラメータを渡すときに連続したスペースがスペースひとつに変換されるため、データベースのフィールドと一致しない

解決策1
テーブルに入れた時に、余分なスペース等を削除する



$items = $wpdb->get_results("SELECT ID, pl_model FROM $tablename", ARRAY_A);
foreach( $items as $value ){
   $pl_model = preg_replace('/\s(?=\s)/', '', $value['pl_model']); //複数スペースをスペースひとつに

   $data = array(
      'pl_model' => $pl_model
      );
   //更新したい行の条件
   $condition = array(
   'ID' => $value['ID']
       );
   $dataFormat = array('%s');
   $conditionsFormat = array('%d');
   $wpdb->update($tablename, $data, $condition,$dataFormat,$conditionsFormat); //アップデート

}

private function __trim($str)
    {
        // 両サイドのスペースを消す
        $str = trim($str);
        // 改行、タブをスペースへ
        $str = preg_replace('/[\n\r\t]/', '', $str);
        // 複数スペースを一つへ
        $str = preg_replace('/\s(?=\s)/', '', $str);

        return $str;
    }

GETでパラメータを渡すときのエンコードについて

urlencode()では、-_. を除くすべての非英数文字が % 記号 (%)に続く二桁の数字で置き換えられ、 空白は + 記号(+)にエンコードされます。 同様の方法で、WWW のフォームからポストされたデータはエンコードされ、 application/x-www-form-urlencoded メディア型も同様です。歴史的な理由により、この関数は » RFC 3986 エンコード( rawurlencode() を参照してください) とは異なり、 空白を + 記号にエンコードします。
半角スペースが2つ続く場合も一つに変換されてしまう。
パラメータに半角の「+」が入っているとurlencode()では、うまく渡されない。この場合「rawurldecode()」を使うと良い。
urlencode()→デコード「urldecode()」
rawurldecode()→デコード「rawurldecode()」