检查字符串是否等于,是以匹配开头还是以匹配结束

时间:2013-01-16 17:10:32

标签: php

我将如何改进此功能: 在数组中搜索以下字段名称:

  • a)完全匹配
  • b)带“_”的生物检查字符串是否以
  • 开头
  • c)以“_”结尾检查字符串是否以
  • 结尾

E.g我有一个列名列表:

array(
    'customer_name',
    'customer_lastname',
    'customer_streetname',
    'customer_dob',
    'system_modified'
)

另一个具有格式化条件的数组:

array(
    '_dob' => 'date_dob',
    '_name' => 'varchar',
    'customer_name' => 'html_text',
    'system_' => 'required'
)

结果根据列名应用条件:

1. customer_name = html_text (exact matches have higher preference)
2. customer_lastname = varchar
3. customer_streetname = 
4. customer_dob = dob
5. system_modified = required

目前有这个:

protected function matchPatterns($string) {
    $return = array();
    $parrerns = $this->_normaliseArrayItem($this->getPatterns());
    foreach ($parrerns as $match) {

        // If exact match
        if($string == $match) {
            $return[] = $match;
            break;
        // Else if begins with _ and ends with string.
        } elseif($string[0] == "_" && substr_compare($string, $match, -strlen($match), strlen($match)) === 0) {
            $return[] = $match;
        }

    } // end loop
    return $return;
}


/**
 * Return an array of validation patterns.
 *
 * @return string[]
 */
public function getPatterns() {
    return $this->_patterns;
}


/**
 * Returns an item as array rather than single item.
 *
 * @param string[] $data
 * @return string[]
 */
protected function _normaliseArrayItem($data) {
    if(!isset($data[0])|| !is_array($data)) {
        $tmp[] = $data;
        $data = $tmp;
    }
    return $data;
}

2 个答案:

答案 0 :(得分:0)

改编自Marc的解决方案。

if(substr($str, 0, 1) === '_' || substr($str, -1) === '_') {
    // it starts or ends with an underscore
} else if($str == $match) {
    // it's the same
}

我不完全理解你的问题。

答案 1 :(得分:0)

foreach ($parrerns as $match => $format) {
    // If exact match
    if($string == $match) {
        $return[] = $format;
        break;
    // Else if begins with _ and string ends with it.
    } elseif($match[0] == "_" && substr_compare($string, $match, -strlen($match), strlen($match)) === 0) {
        $return[] = $format;
    // Else if ends with _ and string begins with it
    } eleif (substr($match, -1) == "_" && substr_compare($string, $match, 0, strlen($match)) == 0) {
        $return[] = $format;
 }