簡體   English   中英

獲取數組中子字符串出現的計數

[英]Get count of substring occurrence in an array

我想計算一個子串在數組中出現的次數。 這是一個Drupal站點,所以我需要使用PHP代碼

$ar_holding = array('usa-ny-nyc','usa-fl-ftl', 'usa-nj-hb', 
                    'usa-ny-wch', 'usa-ny-li');

我需要能夠調用像foo($ar_holding, 'usa-ny-');這樣的函數foo($ar_holding, 'usa-ny-'); 讓它從$ar_holding數組返回3。 我知道in_array()函數,但它返回第一次出現的字符串的索引。 我需要函數來搜索子字符串並返回計數。

你可以使用preg_grep()

$count = count( preg_grep( "/^usa-ny-/", $ar_holding ) );

這將計算以“usa-ny-”開頭的值的數量。 如果要在任何位置包含包含字符串的值,請刪除插入符號( ^ )。

如果你想要一個可以用來搜索任意字符串的函數,你還應該使用preg_quote()

function foo ( $array, $string ) {
    $string = preg_quote( $string, "/" );
    return count( preg_grep( "/^$string/", $array ) );
}

如果您需要從字符串的開頭搜索,以下工作:

$ar_holding = array('usa-ny-nyc','usa-fl-ftl', 'usa-nj-hb', 
                    'usa-ny-wch', 'usa-ny-li');

$str = '|'.implode('|', $ar_holding);

echo substr_count($str, '|usa-ny-');

它利用implode函數將所有數組值與| 中間的字符(以及第一個元素之前),因此您可以使用搜索字詞搜索此前綴。 substr_count然后執行臟工作。

| 充當控制字符,因此它不能成為數組中值的一部分(事實並非如此),只是說你的數據發生了變化。

$count = subtr_count(implode("\x00",$ar_holding),"usa-ny-");

\\x00幾乎可以肯定,你最終不會因為將數組連接在一起而導致匹配重疊(唯一的一次是它會發生,如果你正在搜索空字節)

我認為沒有理由過度復雜化這項任務。

每次從搜索字符串開始值時,迭代數組並將計數加1。

代碼:(演示: https//3v4l.org/5Lq3Y

function foo($ar_holding, $starts_with) {
    $count = 0;
    foreach  ($ar_holding as $v) {
        if (strpos($v, $starts_with)===0) {
            ++$count;
        }
    }
    return $count;
}

$ar_holding = array('usa-ny-nyc','usa-fl-ftl', 'usa-nj-hb', 
                    'usa-ny-wch', 'usa-ny-li');
echo foo($ar_holding, "usa-ny-");  // 3

或者,如果您不希望聲明任何臨時變量:

function foo($ar_holding, $starts_with) {
    return sizeof(
        array_filter($ar_holding, function($v)use($starts_with){
             return strpos($v, $starts_with)===0;
        })
    );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM