スレッド表示 | フラット表示〕 全トピック 920 件中 207 番目 次≫ ≪前

array_map について

created: 2006-08-06 13:01 | modified: 2006-08-06 16:54 | reply: 2

[3207] array_map について

user: volks | created: 2006-08-06 13:01
こんにちは、配列の関数についてですが、質問させてください。

今、array_map を使って配列のデータに処理をしているのですが、

-------------------------------------------------------

$lineArray=array_map('enterReturn2TEXT',$lineArray);

function enterReturn2TEXT($str){
$str =preg_replace("/\t/","\n",$str);
return $str;
}

-------------------------------------------------------

ここで汎用性を持たせればと思い、関数内で変換される \t を選べるようにしたいのですが、
関数内を

function enterReturn2TEXT($str,$key){
$str =preg_replace("/$key/","\n",$str);
return $str;
}

へ変更した場合に関数の呼び出し側のarray_mapで$keyの引数を$key='\t'としたい所なんですが、どうすれば良いのか悩んでいます。
array_map では対応しきれないのかなとも思い、array_walkなども調べてテストしてみたのですが、なかなか成功できません。

よろしければ、アドバイスお願い致します。
reply: 3208 返信 編集 削除

[3208] preg_replaceだけで十分

user: ach | created: 2006-08-06 16:01
http://jp.php.net/manual/ja/function.preg-replace.php
>subject が配列の場合、検索と置換は subject の各要素に対して行われ、返り値も配列となります。
つまり
$a = array('foo','hoge','bar');
$b = preg_replace('/o/','*',$a);

var_dump($b);

/*結果
array(3) {
[0]=> string(3) "f**"
[1]=> string(4) "h*ge"
[2]=> string(3) "bar"
}
*/


あえてarray_mapを使うなら
>配列の長さが等しくない場合、最も短い配列は空の要素で拡張されます。
とあったので,(無理矢理に)利用して
function mapReplace($input, $from, $to)
{
static $sFrom, $sTo;
if (!is_null($from)) $sFrom = $from;
if (!is_null($to)) $sTo = $to;
return preg_replace($sFrom, $sTo, $input);
}

$lineArray = array_map('mapReplace', $lineArray, (array)"/\t/", (array)"\n");
こんなんでどうでしょう

array_walkでもマニュアルに載っているサンプルのtest_alterをちょこちょこっと書き換えればできるはず.
Parent: 3207  reply: 3210 返信 編集 削除

[3210] Re.preg_replaceだけで十分

user: volks | created: 2006-08-06 16:54
ach 様 有難うございます。

> preg_replaceだけで十分

今ヘルプを見てびっくりしました。。すいません、array_mapやarray_walk に気をとられて、自分が使っている関数の事を全然理解できていませんでしたね。
もう少し、preg_replace や str_replace についての理解も深めたいと思います

さらにサンプルまで作って頂いて有難うございます。ach 様のサンプルとヘルプのサンプルを見ていると少しづつイメージができてきました。
array_map とarray_walk でテストをやりたいと思います。

恥ずかしながら・・・、phpのヘルプはまだ私にとって難しくて、
読んでも理解できない事が多く、初歩的な質問ばかりになってしまってすいません。
親切に有難うございました!!
今後ともどうぞよろしくお願い致します。
Parent: 3208  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 207 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑