![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
preg_replcace_callback を使用して、<a>タグ内のURLの字数を制御するコードに取り組んでいます。詳しい方アドバイスしてくださると助かります。
下のコードの、shorten(カスタム関数)に渡されるデータが配列なのですが、並列に並んだ配列のようなのです。echo をかけてみると、ArrayArray と表示されます。しかし、Array([0]=>Array [1]=>Array) ではないので、どうやって 処理をかけて return すればよいのか途方にくれています。
もしよい方法をご存知の方おられましたらどうぞよろしくお願いいたします。
<?
$str = <<<HERE
//長いURLのサンプルです。ここの掲示板の処理で途中で表示がカットされていますが、<a href="http://長いURL">http://長いURL</a>という構成になっています。
<a href="http://gooooooooooooooooooooooooooooooooooogle.c …[</a>
<a href="http://yahooooooooooooooooooooooooooooooooooo.co …
HERE;
$pattern = "#<a(.*?)>(.*?)<\/a>#s";
$str = preg_replace_callback($pattern, 'shorten', $str);
echo $str;
function shorten($matches) {
foreach($matches as $index => $match) {
if (strlen($match) > 20) {
$matches[$index] = substr($match, 0, 20) . '....';
}
}
return $matches;
}
?>
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
No.1ベストアンサー
- 回答日時:
>echo をかけてみると、ArrayArray と表示されます。
function shorten($matches) {
var_dump($matches); // 変数のダンプをする
・・・
とすると、shorten関数に渡ってきたデータの構造がわかります。
このデータは配列で、$matches[0]はパターン全体にマッチした文字列、$matches[1]はパターン内の1番目の()にマッチした文字列、$matches[2]はパターン内の2番目の()にマッチした文字列、、、となります。
returnするのは文字列です。returnした文字列によって、パターン全体にマッチした部分が置き換わります。この例で、「hogehoge」をリターンすると、「<a href="url">url</a>」が「hogehoge」に置き換えられます。
PHPマニュアルに、もっと詳しい説明や例が載っています。
http://www.php.net/manual/ja/function.preg-repla …
ありがとうございます。マニュアルは一通り目を通しました。しかし、マッチが格納されている変数が複数の配列を含んでいるケースは見当たらなかったのですがこちらの見落としでしょうか?
print_r($matches)を関数内で行った結果、
Array
(
[0] => <a href="URL1">URL1</a>
[1] => href="URL1"
[2] => URL1
)
Array
(
[0] => <a href="URL2">URL2</a>
[1] => href="URL2"
[2] => URL2
)
とでました。URL1、2はそれぞれ違うhttp://形式のURLです。
これをどのようにして返せばよいのでしょうか?
$pattern = "#<a(.*?)>(.*?)<\/a>#s";
$str = preg_replace_callback($pattern, 'shorten', $str);
echo $str;
function shorten($matches) {
if (strlen($matches[2]) > 20) {
$matches[2] = substr($matches[2], 0, 20) . '....';
}
return $matches;
}
としても、ArrayArray と表示されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- PHP preg_matchで Warning: Undefined variableが出ます 1 2022/11/15 17:06
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Excel(エクセル) 列の複数ある空白セルを飛ばして、セルに並べて表示したい 3 2023/02/12 16:49
- PHP PHP MySql ページング 2 2022/09/20 06:38
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数に指定文字列が含まれると...
-
preg_matchでエラーが出ます。
-
、"(ダブルクォーテーション)...
-
PHPで変数から1行目だけを取得...
-
PHPの正規表現の/(?<!\\\\\\),/...
-
「/」を利用した正規表現
-
ExcelでWeb検索のような検索を...
-
ソフトバンクのUSERAGENTうまく...
-
preg_replace_callback が渡す...
-
firefoxのブックマークから要素...
-
C#でのワイルドカードを使った...
-
正規表現について
-
PHP preg_matchでUnknown modif...
-
文字列を配列にしたい
-
文字列から英数字の判別
-
正規表現/Uについて
-
VBAを使ってHTMLソースから特定...
-
正規表現 画像リンクのaltの取得
-
配列にある文字と文字列との一...
-
URLを抽出する正規表現
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
preg_matchでエラーが出ます。
-
VBAを使ってHTMLソースから特定...
-
Excelで数字のみを2倍3倍にする...
-
PHPで変数から1行目だけを取得...
-
正規表現でシングルクォーテー...
-
、"(ダブルクォーテーション)...
-
正規表現で「0」のみ抽出
-
住所から特定の文字列、数値を...
-
PHPで あるフォルダ内の、特定...
-
phpでhtmlソースを解析し、文字...
-
PHPで<a>タグ内からURLと文字を...
-
正規表現で特定のHTMLタグのク...
-
PHPの正規表現で住所を分けるに...
-
Smartyを使用した、テンプレー...
-
PHPによるIPアドレスマッチ
-
正規表現で、半角大文字と半角...
-
php 正規表現で(ただし○○は除...
-
PHPメールフォーム URLと半角...
-
「半角数字」と「+」を許可する...
-
preg_matchでのマッチが正しく...
おすすめ情報