![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
PHPで複数配列で重複する文字列が含まれている場合の処理の仕方について
$a[0] = "あああいいいうううかかかききき";
$a[1] = "あああいいいうううかかかくくく";
$a[2] = "あああいいいうううかかかけけけ";
$a[3] = "あああいいいうううきききききき";
上記のような配列があったとします(配列の要素数については可変です)
上記配列の中で共通する文字列を削除し(文字列の先頭のほうを削除)
$a[0] = "かかかききき";
$a[1] = "かかかくくく";
$a[2] = "かかかけけけ";
$a[3] = "きききききき";
のようにしたいのですが処理方法が思い浮かびません。
文字列を分解して比較する処理まではできるのですが、要素数が3つになったり7つになったりした場合の方法が思い浮かびません。
どなたか 分かる方よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんな感じでいかがでしょう。
--
mb_internal_encoding( 'UTF-8' );
$offset = 0;
for( $i = mb_strlen( $a[0] ); 0 < $i; $i-- ){
$prefix = mb_substr( $a[0], 0, $i );
$match = true;
foreach( $a as $str ){
if( mb_strpos( $str, $prefix ) !== 0 ){
$match = false;
break;
}
}
if( $match ){ $offset = $i; break; }
}
foreach( $a as &$str ){
$str = mb_substr( $str, $offset );
}
No.2
- 回答日時:
こんな感じで
<?PHP
$a[0] = "あああいいいうううかかかききき";
$a[1] = "あああいいいうううかかかくくく";
$a[2] = "あああいいいうううかかかけけけ";
$a[3] = "あああいいいうううきききききき";
$b=array();
for($j=0;$j<count($a);$j++){
$c=array();
if($j==0) $temp=&$b; else $temp=&$c;
for($i=0;$i< mb_strlen($a[$j]);$i++){
$str=mb_substr($a[$j],$i,1);
if(array_search($str,$temp)===false) $temp[]=$str;
}
if($j>0) $b=array_diff($b,array_diff($b,$c));
unset($c);
}
for($i=0;$i<count($a);$i++){
$a[$i]=str_replace($b,"",$a[$i]);
}
print_r($a);
?>
ロジック:
$a[0]の要素を$bにとっておき、$a[1]以降の要素を$cにとります。
$bと$cをくらべて、$bにしかない要素を$bから削除すると、
$aを一回りすれば$bには、全ての$aに共通する要素だけ残ります。
そこで、$aから$bの要素を削除すれば、命題の結果になります。
※もちろんもっと簡単なロジックもあるとは思います。
すばやい回答ありがとうございます。
早速試してみたところ、中途半端な文字列になってしまいました。
重複している文字を抜き取るような感じでしょうか。
私が欲しかったのは文字列の先頭のほうを削除する方法です。
(上手く説明できてなくてすみません)
よって ky072さんの方法を使わせて頂くことにします。
ありがとうございましました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Java Java 南京錠 2 2023/02/04 11:46
- Excel(エクセル) Excelについて質問です(ver2019) 1 2023/06/30 21:20
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Visual Basic(VBA) ExcelVBAで配列2つを結合させて重複アドレスを削除したいです 3 2023/04/25 15:31
- JavaScript Javascript の配列の削除 (初心者) 4 2022/05/02 11:12
- Excel(エクセル) ExcelVBAでリストの項目に必要数と同じ手配数を分配していくマクロを作りたいです。 1 2022/07/29 18:36
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
file_existsでファイル名の部分...
-
[PHP] fputcsv()関数でファイル...
-
PHP 多次元配列変数のデータ受...
-
PHPのPOSTでの半角スペース
-
【PHP】配列の最後の要素の...
-
配列の要素数について
-
postgresql関数をつかったレコ...
-
CSVデータの一部を変換したい
-
PHPの基礎知識でお伺いします
-
String だと「 ByRef引数の型が...
-
テキストファイルにてデータ管理
-
xml_parse_into_structを使うと...
-
配列のからの要素に代入
-
PHPプログラミング スペースで...
-
変数の比較
-
PHP 配列の添字に変数は使えない?
-
セッションの宣言
-
配列をmb_ereg_replaceで一気に...
-
総当たりのアルゴリズムについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
$_SESSIONに二次元配列を使える...
-
file_existsでファイル名の部分...
-
配列をループでたくさん宣言し...
-
foreachのなかで次のキーを参照...
-
String だと「 ByRef引数の型が...
-
PHPのカッコ[ ]の使い方について
-
配列を回すとき、最後の要素だ...
-
配列一致(要素順番は違うが内容...
-
チェックボックス複数選択 mys...
-
漢字のソートについて
-
postgresql関数をつかったレコ...
-
ネストが深い時のforeachはどう...
-
URLのサブドメインとドメイン部...
-
OCI で、SELECT結果行数を取得...
-
【Smarty】foreach関数やsectio...
-
$_POSTを一括してサニタイズし...
-
phpで、連想配列を普通の配列に...
-
チェックボックスが複数選択で...
-
連想配列のprint_rやvar_dump出...
-
PHP 配列の添字に変数は使えない?
おすすめ情報