カテゴリー別アーカイブ: PHP

文字列の短縮

ダラダラと長い文字列をサイトのブロック要素にぶち込んで並べた場合に、文字列の長さによってブロック要素の大きさがまばらでなんだか格好が悪いので長い文字列の短縮をしましょう、ということで。

$strtitle = mb_substr($title,0,30,"UTF-8");
if ($title<>$strtitle) $strtitle.="…";

最長の文字列とブロック要素の大きさを調整して表示すると綺麗に並べれて美しくなるよ

phpの配列の再定義についてテストするよ(断固)

ほら、おっさんプログラマって昔VBとかでReDimとかやってたんだって。
Cで文字配列の最後の¥0入れ忘れてメモリ壊しまくっちゃった事あるんだって。
心配なんだって。配列の再定義なんか。
しかも配列数を指定せずに配列に値ぶちこんでこの配列にいくつ入ってるのかーなんて自動でやってくれないからカウンター仕込みまくるんだって。
連想配列、foreachの挙動も心配なんだって。なかったらwarning吐いちゃうし
「そんなところからオッサンはテストしなきゃいけないのかよwプゲラーw」とかいわれてもやっちゃうしぃー。

…まぁイイワケはここまでにして
再定義した場合の配列のカウント、内容チェックテスト
なんつか基本からやってすいません。

ソース:
<?php
//配列の再定義のテスト
$ary = array();
$ary[0]="test0";
$ary[1]="test1";
$ary[1]="test2";
print "no1:count=".count($ary)."\n";
var_dump($ary);
print "\n";
$ary = array();
$ary[0]="test00";
print "no2:count=".count($ary)."\n";
var_dump($ary);
print "\n";

結果:
no1:count=2
array(2) {
[0]=>
string(5) "test0"
[1]=>
string(5) "test2"
}
no2:count=1
array(1) {
[0]=>
string(6) "test00"
}

explodeの使い方ではまった。

Parse error: syntax error, unexpected ‘[‘ in [phpファイル名] on line [行数]

explode1行既存のコードに追加したところエラーが出た。
あーん?パースエラーのシンタックスエラーなんて、どうせクォート書き忘れたとかなんか書き間違えたんだろうと。1文・1文字ずつ見直すが思い通りのコードになってる。
??意味わからん。

$filename = explode("<>" , $filename )[0];

どこを間違うっていうんだ?

てサンプルコード作って動かしたら動いちゃう。ますます悩んで??あれこれ悩んだ末…
で結論。

サンプルコード動かすphpディレクトリのphp5.4のバージョン
本番実行するファイルをphp5.3で動かしてました。

どうもphp5.3ではexplodeの返り値配列をつづけてexplode(…)[0];みたいにいじったら駄目みたい。
下記、5.4で普通に書くコードと、5.3でも動くバージョン
単に一回配列変数に落とし込んでるだけなんだけど。

//php5.4で動くコード
$source_str=";lkj;ljasd;fjas;lkjg;alskj;glaksj";
$ary = explode("asd",$source_str);
$output = explode("asd",$source_str)[0];  //←ここで5.3では動かない
print "output=".$output;
print_r($ary);
print "<br />------------------<br />\n";

//php5.3でも動くコード
$source_str=";lkj;ljasd;fjas;lkjg;alskj;glaksj";
$ary = explode("asd",$source_str);
$aryoutput = explode("asd",$source_str);  //←変更
$output = $aryoutput[0];                  //←変更
print "output=".$output;
print_r($ary);
print "<br />------------------<br />\n";

追記:
$output = reset(explode("asd",$source_str));
これは1行でいけるんだな。分割した文字列の最初の要素を取り出す時にしか使えないけど。
最後の要素はrest→end()に変更でいける。
ま、普通最初の要素取り出す時にしかこんなexplode(…)[0]みたいな書き方しないよね。ならresetでいいかと。
もし詳しく配列内部を読み倒して処理するなら普通に配列に一旦放り込むしね。

splitでエラー: Deprecated: Function split() is deprecated in ファイル名 on line 行数

Deprecated: Function split() is deprecated in [実行ファイル名] on line ○○

なもんでsplit調べてみると
警告: この関数は PHP 5.3.0 で 非推奨となりました。 この機能を使用しないことを強く推奨します。
でsplitは非推奨になったそうな。代わりにexplode使えばよろしい。

//$r = split("\n", $r);
$r = explode("\n",$r);

この程度ならこれでいいけど正規表現使いたかったら
preg_split() – 正規表現で文字列を分割する
を使えばいいらしい。今は必要ないので考えない