0

毎回長さが異なる特定の文字列が、毎回長さが異なる配列内の文字列内にあるかどうかを確認する必要があるコードがあります。

「strstr」を使用してテキストが特定の文字列に含まれているかどうかを確認し、「in_array」を使用して文字列が配列に含まれているかどうかを確認できますが、2つを接続できないようです。

できるだけ簡単に言えば:

$array = array([0]=>'12345',[1]=>'67890');
if(in_array(strstr(3,$array)))
= true
or
= 0 (being the key)

(明らかにこれは機能しませんが、うまくいけば、私がやろうとしていることを示すのに役立ちます)

配列をパーツに分割し、それぞれを個別に比較することを検討しましたが、配列のサイズと、1 回の実行でこの操作を完了する必要がある回数が原因で速度の問題が発生する可能性があることを懸念しています。また、誰もがそれを考えることができるよりクリーンな方法があれば、全体的にはるかに優れています.

4

4 に答える 4

1

PHP の関数型プログラミングを使用して実現できます。PHP 5.3 以降、大幅に改善されました。ただし、要素が見つかった場合でも、配列全体を反復処理すると思います。反復ソリューション (以下を参照) は停止する可能性があります。

機能的な解決策も少し複雑に見えるかもしれませんので、理解できない場合は、以下の反復的なものを使用してください ;) 関数型は多くの場合、配列タスクに対してエレガントであると思うので、私はそれを書きました。

<?php

function checkIfInArrayString($array, $needle) {
    $found = array_reduce($arr, function($isFound, $value) use ($needle) {
        return $isFound || false !== strpos($value, $needle);
    }, false);

    return $found;
}

$arr = array(
    'foo',
    'my',
    'test'
);

var_dump(checkIfInArrayString($arr, 'oo'));
var_dump(checkIfInArrayString($arr, 'ooo'));

これは、同じ問題の反復ソリューション (テストされていません) です。

function checkIfInArrayString($array, $searchingFor) {
    foreach ($array as $element) {
        if (strpos($element, $searchingFor) !== false) {
            return true;
        }
    }
    return false;
}

文字列が別の文字列に含まれているかどうかだけを知る必要がある場合に PHP ドキュメントで推奨されているため、strpos代わりにを使用しました。より少ない情報を返すため、実装が軽量になります。strstrstrpos

于 2013-03-27T17:34:28.780 に答える
0

これがあなたがやろうとしていることであるかどうかは、あなたの質問から完全にはわかりませんが、単純な preg_match() で問題が解決するようです。somethingsomething文字列 " "... hello world..." "内に含まれる文字列 "hello world" を探しているとしましょうsomethingelse

あなたは単に使用します

preg_match(/somethingsomething(.*)hello world(.*)somethingelse/, $haystack); //return 1 if found

例を少しきれいにしますstr::

preg_match(/::(.*)str(.*)::/, $haystack); //if (found) return 1; 
                                          //if (!found) return 0; 
                                          //if (err) return false;

$multiple_occurences = /::(.*)(str)(.*)::/;
$single_occurence    = /::(.*)str(.*)::/;

これにより、もう少し明確になることを願っています。preg_match() メソッドについて質問がある場合は、次のドキュメントが非常に役立ちます: preg_match() ドキュメント。

于 2013-03-27T17:25:20.890 に答える