質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

mb_splitを使用して文章の一部を削除

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 355

score 4

プログラミング(PHP)の学習を始めたばかりの者です。

初歩的な質問だと思いますが、自己解決が出来ませんでしたので
投稿させていただきました。

「問題」
mb_splitを使用して、文字列から一部削除したい。

「元々の文字列」
hqadppey

「削除したい文字
qed

「発生している問題」
PHPマニュアルを参考にして「<>」や「,」など一文字や連続しているなら実現できるが、文字列の中にランダムに配置されている複数の文字を削除する事ができない。

「作成したコード」

$a = "hqadppey";

$b = "qed";

$c = mb_split($b, $a);

var_dump($c);

「実行結果」

array(1) { [0]=> string(8) "hqadppey" }

mb_splitを使用する理由ですが、学習に利用している設問での指定だからです。
ご指摘頂いているように、PHPマニュアルを見たり、他の方の質問、記事、ブログなどを拝見させていただくと他に適した関数があるようですが、mb_splitを使用する方法を学ばせる意図がある項目なのでしょう。
まだプログラミング自体の理解が浅く、そうする意味まで推測する事は出来ませんが……。

このような質問で申し訳ない気持ちと、恥ずかしさや情けない気持ちでいっぱいです。

ご回答頂けると幸いです。
よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/08/24 21:11

    PHPマニュアルを参考にしたのでしたらなぜmb_split()を採用したのか記載いただきたく。
    コードはマークダウンのcode機能を利用してご提示いただきたく

    キャンセル

回答 2

+1

hqadppey を hppey こうしたいのであれば、利用する関数は mb_split ではありません。

str_replace を使うべきです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/25 01:31

    回答ありがとうございました!
    様々な関数があるのですね。勉強して参ります!

    キャンセル

check解決した方法

0

以下のコードで表示だけは成功しましたが、
もっとスマートな方法がある気がしてなりません。

なぜ「mb_splitを使用」という指定があったのかも理解できませんでした。

私はまだ勉強中の身で実際の業務には就いていないのですが、
業務として行う際にはそういった指定もあるのでしょうか……。

$a = 'hqadppey';

$b = "qed";

$b2 = str_split($b);

function func($b2, $a) {
    $return = array();

    $a2 = array($a);

    foreach ($b2 as $value1){

        foreach ($a2 as $key => $value2) {
            $return = array_merge($return, mb_split($value1, $value2));

            if(count($a2) - 1 === $key) {
                $a2 = $return;
                $return = array();
            }
        }
    }
    return $a2;
}


$c = func($b2, $a);


for($i = 0; $i < count($c); $i++){
   echo $c[$i];
}

「表示結果」
happy

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/25 07:54

    業務として対応するのであれば要件をもっと明確にした上で冗長な処理を省きます。短くて同等以上の高かを得られるならそれに越したことはありません。(かといって競技プログラミングみたいなコードをめざすのも違いますけど)

    キャンセル

  • 2019/08/25 09:46

    最終的に回答を教えてもらえるなら、その結果をこちらに反映して欲しい気がします。
    また、設問を正しく転記しているかも気になります。

    str_splitを使うのであれば、1行で書けると思います。

    $a = "hqadppey";
    $b = "qed";
    echo str_replace(str_split($b), '', $a);

    happy

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る