$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文字に収まらなかったのでコメントに記述しています。
よろしくお願いします。
こんな感じでどうでしょうか。文字セットは 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>' ; ?>
一度にやらせるのではなく、普通にプログラムを組んだらどうですか?
// 結果配列 $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で書いてくださいね。
動作チェックしてません。
$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]=>'仮装パーティーのお知らせ。')
);