PHP5の関数の質問です。


$a = array(
[0] =>array([text01]=>'aaa', [data]=>'モルトの試飲会。ふるってご応募ください。')
[1] =>array([text01]=>'bbb', [data]=>'パーティーなどいかが?カクテル飲み放題です。')
[2] =>array([text01]=>'ccc', [data]=>'ジムマッキュワンが来日。ワインのセミナーも兼。')
[3] =>array([text01]=>'ddd', [data]=>'ところてんは好きですか?私は嫌いです。')
[4] =>array([text01]=>'eee', [data]=>'今度ピクニックのイベントを組みます')
[5] =>array([text01]=>'fff', [data]=>'仮装パーティーのお知らせ。')
);

以上の配列を、コメント記述にある処理をやらせたいのですが関数がわかりません。
500文字に収まらなかったのでコメントに記述しています。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/10/16 18:46:37
  • 終了:2008/10/16 21:31:59

ベストアンサー

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812008/10/16 19:37:14

ポイント35pt

こんな感じでどうでしょうか。文字セットは UTF-8 で。

<?php
$a = array(
  0 =>array('text01'=>'aaa', 'data'=>'モルトの試飲会。ふるってご応募ください。'),
  1 =>array('text01'=>'bbb', 'data'=>'パーティーなどいかが?カクテル飲み放題です。'),
  2 =>array('text01'=>'ccc', 'data'=>'ジムマッキュワンが来日。ワインのセミナーも兼。'),
  3 =>array('text01'=>'ddd', 'data'=>'ところてんは好きですか?私は嫌いです。'),
  4 =>array('text01'=>'eee', 'data'=>'今度ピクニックのイベントを組みます'),
  5 =>array('text01'=>'fff', 'data'=>'仮装パーティーのお知らせ。')
) ;

function filter($a, $s1, $s2) {
  return array_values(array_filter($a, create_function(
    '$e', "return !preg_match('/$s1|$s2/u', \$e['data']) ;"
  ))) ;
}

echo '<pre>' ;
print_r(array_slice(filter($a, 'モルト', 'ワイン'), 0, 3)) ;
print_r(filter($a, 'パーティー', 'ワイン')) ;
echo '</pre>' ;
?>
id:seadwell

てっきり、foreach を使ってその中で処理させると思ってましたが・・・。

初めて見た関数も沢山あります。

解読に時間がかかりそうです^^;

2008/10/16 20:02:30

その他の回答(1件)

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812008/10/16 19:37:14ここでベストアンサー

ポイント35pt

こんな感じでどうでしょうか。文字セットは UTF-8 で。

<?php
$a = array(
  0 =>array('text01'=>'aaa', 'data'=>'モルトの試飲会。ふるってご応募ください。'),
  1 =>array('text01'=>'bbb', 'data'=>'パーティーなどいかが?カクテル飲み放題です。'),
  2 =>array('text01'=>'ccc', 'data'=>'ジムマッキュワンが来日。ワインのセミナーも兼。'),
  3 =>array('text01'=>'ddd', 'data'=>'ところてんは好きですか?私は嫌いです。'),
  4 =>array('text01'=>'eee', 'data'=>'今度ピクニックのイベントを組みます'),
  5 =>array('text01'=>'fff', 'data'=>'仮装パーティーのお知らせ。')
) ;

function filter($a, $s1, $s2) {
  return array_values(array_filter($a, create_function(
    '$e', "return !preg_match('/$s1|$s2/u', \$e['data']) ;"
  ))) ;
}

echo '<pre>' ;
print_r(array_slice(filter($a, 'モルト', 'ワイン'), 0, 3)) ;
print_r(filter($a, 'パーティー', 'ワイン')) ;
echo '</pre>' ;
?>
id:seadwell

てっきり、foreach を使ってその中で処理させると思ってましたが・・・。

初めて見た関数も沢山あります。

解読に時間がかかりそうです^^;

2008/10/16 20:02:30
id:tezcello No.2

tezcello回答回数457ベストアンサー獲得回数682008/10/16 19:55:51

ポイント35pt

一度にやらせるのではなく、普通にプログラムを組んだらどうですか?

// 結果配列
$b = array();
$c = array();

foreach($a as $src){  // $a でループ
  // 条件に合致するもののみ、結果配列に追加する
  // $b
  if (($count($b) < 3) and !preg_match('/(モルト|ワイン)/u', $src['data']) $b[] = $src;

  // $c
  if (preg_match('/(パーティ|ワイン)/u', $src['data']) $c = $src;
}

スクリプトはUTF-8で書いてくださいね。

動作チェックしてません。

id:seadwell

やっとできました。preg_matchの/uが何のため付いているのか?調べるのに時間がかかりました。

GoldenDawn さんのアイデアも頂き、動作確認しましたありがとうございます。

2008/10/16 21:30:53
  • id:seadwell
    $a[$i]['data'] に、『モルト』と『ワイン』の文字が入っていたらその行を削除し、かつ、添え字0から数えて3つめ以降の行は削除し、添え字を振りなおす。
    $b = array(
    [0] =>array([text01]=>'bbb', [data]=>'パーティーなどいかが?カクテル飲み放題です。')
    [1] =>array([text01]=>'ddd', [data]=>'ところてんは好きですか?私は嫌いです。')
    [2] =>array([text01]=>'eee', [data]=>'今度ピクニックのイベントを組みます')
    );



    $a[$i]['data'] に、『パーティー』と『ワイン』の文字が入っている行以外を削除し、添え字を振りなおす。
    $c = array(
    [0] =>array([text01]=>'bbb', [data]=>'パーティーなどいかが?カクテル飲み放題です。')
    [1] =>array([text01]=>'ccc', [data]=>'ジムマッキュワンが来日。ワインのセミナーも兼。')
    [2] =>array([text01]=>'fff', [data]=>'仮装パーティーのお知らせ。')
    );

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません