質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

6702閲覧

カッコ内の数字の意味とは

aaaaaaaa

総合スコア501

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2016/07/12 11:19

下記のソースで既存の変数を配列で返すメソッドを利用し、var_dump()で返ってきたものを表示しております。
例えば$testだとstring(24) "ええええええええ"のように表示されるのですが、文字列型のあとの(24)は、何を意味する数字ですか。

php

1$test = "ええええええええ"; 2$b = array(4,5,3,6,3); 3$hensu = get_defined_vars(); 4 5var_dump($hensu);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

バイト数です。UTF8 ではひらがなは一文字 3 バイトです。

投稿2016/07/12 11:36

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaaaaaa

2016/07/13 08:04

ご回答有難うございました。unicodeだと3バイトになるのですね。勉強不足で漠然と半角は、1バイト漢字やひらがななどは、2バイトと思っておりました。
Zuishin

2016/07/13 08:07

「unicode では」ではありません。「utf8 では」です。 unicode には色々な規格がありますが、その中で utf8 は、英数字を 1 バイトで表すために、ひらがなや漢字などのバイト数が増えています。
mpyw

2016/07/13 16:00 編集

以下のサイトがわかりやすいです. http://una.soragoto.net/topics/9.html 「Unicode番号」と「UTF-8のバイト列」は別物のようにしか思えませんが,「UTF-16BE(Big Endian)のバイト列」とは絵文字などを除けばわりとそのまま対応している範囲が多いです. 例えば文字「あ」は Unicode番号: 「3042」 UTF-8: 「e3」「81」「82」 UTF-16LE: 「42」「30」 UTF-16BE: 「30」「42」 となりますね.
guest

0

ベストアンサー

【参考回答】

こちらをお読みください.
マルチバイト文字を扱う際に気をつけること

php

1$string = 'あいうえお'; 2 3$chars = []; 4foreach (preg_split('/(?<!\A)(?!\z)/u', $string) as $char) { 5 $chars[] = [ 6 'char' => $char, 7 'bytes(16進数)' => implode(' ', array_map('bin2hex', str_split($char))), 8 'bytes(10進数)' => implode(' ', array_map('ord', str_split($char))), 9 ]; 10} 11print_r($chars);

このようにしてみると,どの文字に何が割り当てられているのか一目でわかります.

投稿2016/07/12 15:00

編集2016/07/12 18:16
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaaaaaa

2016/07/13 11:18

ご回答有難うございました。重ね重ね申し訳ありませんが、上記のソースは、 文字列あいうえおが代入された$stringと空っぽの配列が代入された$charsがある。 $stringを正規表現にかけ、何らかの方法でマッチしたらマッチした部分で分割する。分割したぶんだけforeach文で$charに代入し、 foreach文内で先ほど宣言していた空っぽの配列が代入されている$charsに、まず添え字がcharの値に$stringを正規表現で分割した$charを代入、 bytes(16進数)という添え字の値で、先ほどの分割したものが入った$charを配列にし(str_split)、配列内の値全てを16進数表記にして、 スペース区切りで文字列にする。 bytes(10進数)は、配列内全てをasciiにして、asciiになった配列を文字列に戻す。 という認識と、 上記の正規表現の、(何かしらの0文字から~1文字、小なり、感嘆符、文字列の始まり)(何かしらの0文字から1文字、感嘆符、文字列の終わり)で、これらを包んでいるカッコは、グループ化のためのもの、という認識は、合っておりますか。
mpyw

2016/07/13 15:47 編集

文字列あいうえおが代入された$stringと,空の配列が代入された$charsがある.正規表現を使ってUTF-8文字列とみなして1文字ずつに分解し,$charに代入してループする.ループ内で 「UTF-8の1文字」 「UTF-8の1文字をstr_splitでバイトの配列に分解して,各要素をbin2hexで16進数表記文字列にし,更に半角スペースで結合したもの」 「UTF-8の1文字をstr_splitでバイトの配列に分解して,各要素をordで整数にし,更に半角スペースで結合したもの (自動的に整数型は10進数整数文字列に変換される)」 の3種類を作り,連想配列にまとめたものを$charsの要素として追加する. …という動作です.正規表現に関しては, 何も書かなければ,任意のバイト境界に一致する 上記にu修飾子をつけると,任意のUTF-8文字境界に一致する \Aは,先頭に一致する \zは,終端に一致する (?<!X)Yは,前にXが続かないYに一致する X(?!Y)は,後ろにYが続かないXに一致する (?<!\A)(?!\z)は,先頭と終端を覗いた任意のバイト境界に一致する 上記にu修飾子をつけると,先頭と終端を覗いた任意のUTF-8文字境界に一致する …要するに,PHPにマルチバイト対応のstr_splitが存在していないので,preg_splitで無理やりやってるというわけです.
mpyw

2016/07/13 15:49

なお好みですが preg_split('/(?<!\A)(?!\z)/u', $string) は preg_split('//u', $string, -1, PREG_SPILT_NO_EMPTY) や array_filter(preg_split('//u', $string), 'strlen') でも構いません.個人的に一番上が最も短いのでしっくりきますが.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問