Verificando se uma chave de matriz contém um valor?

Eu tenho uma matriz, eu quero verificar se as teclas possuem ‘-main’ depois delas.

foreach ($data as $key => $value) { if (substr($key, -5) == '-main'){ .... } } 

Se eles tiverem ‘-main’, então quero obter o texto antes de ‘-main’. Eu faço:

 $myVar = substr($key, 0, -5); 

Existe uma maneira mais eficiente de dividir a chave, então eu não tenho que fazer duas sub-strings? Talvez eu não queira usar ‘-main’ mais e quero usar um item de busca de comprimento diferente, talvez como uma variável. Eu então teria que fazer uma contagem de caracteres em vez de especificar -5. Existe uma maneira de incorporar uma variável sem ter que fazer contagem de caracteres?

Você pode usar uma pesquisa regex ( http://php.net/manual/de/function.preg-match.php ) para fazer a tarefa.

 if (preg_match('/^(.*)(-main)$/', $key, $hit)) { $myVar = $hit[1]; // explanation: // $hit[0] will contain the whole result string // $hit[1] will contain the part before "-main" // $hit[2] will be "-main" } 

A expressão regular é a seguinte:

  • / … / -> requiered por preg_match
  • ^ -> início da string (queremos começar na primeira posição
  • (-main) -> o texto de pesquisa que estamos usando
  • $ -> fim da string (não queremos um -main no meio da string para corresponder)
  • (. *) qualquer outra coisa na corda entre o início e “-main” – o paranthesis significa que isso será retornado como uma parte de $ hits

Se você mudar o texto que deseja procurar, lembre-se de que certos caracteres têm um significado especial em uma regex. Então você pode precisar escaping deles.