Pergunta sobre higher-order-functions, filtering, php, arrays – Como remover todos os elementos da matriz PHP contendo uma certa subcadeia?

3

ok eu olhei para cima algumas funções e eu não tenho a sorte de encontrar algum,

Eu quero filtrar uma matriz para retirar matriz específica que contém algumas seqüências de caracteres

Aqui está um exemplo:

<code>$array(1 => 'January', 2 => 'February', 3 => 'March',);
$to_remove = "Jan"; // or jan || jAn, .. no case sensitivity
$strip = somefunction($array, $to_remove);
print_r($strip);
</code>

deve retornar

<code>[1] => February
[2] => March
</code>

uma função que procura a subcadeia de caracteres para todos os valores em uma matriz, se a subcadeia for encontrada, remova esse elemento da matriz

Sim, mas parece tão longo e minha preguiça não vai ler tudo isso lol, alguém pode usar essa função com o exemplo que eu escrevi, obrigado Lili Abedinpour
várias dezenas de exemplos na página de manual, o que mais você quer? user557846
php.net/array_filter? As funções do PHP são fáceis de encontrar e recebem o nome do que fazem ... Marc B
@marc sim mas php não tem muita informação sobre essa função, eu quero ver como funciona como eu quero acima Lili Abedinpour

Sua resposta

3   a resposta
7

Você pode usararray_filter estripos

<code>$array = array(1 => 'January', 'February', 'March');
print_r(array_filter($array, function ($var) { return (stripos($var, 'Jan') === false); }));
</code>
Então mude o=== false com!== false. Nesse casoreturn (stripos($var, 'fEb') !== false). mpratt
funciona bem, mas como desativar a sensibilidade a maiúsculas para isso? Lili Abedinpour
Usando a função strip, você não precisa se preocupar com a diferenciação entre maiúsculas e minúsculas. mpratt
uma última pergunta, como retornar apenas matrizes que contém uma string específica? Lili Abedinpour
0

A maneira mais simples é comarray_filter. Essa função recebe a matriz para filtrar e uma função de retorno de chamada que faz a filtragem real com base no valor recebido:

<code>function filter_func( $v )
{
  return ( ( $var % 2 ) == 0 );
}
$test_array = array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 );
print_r( array_filter( $test_array, "filter_func" ) );
</code>

Espero que tenha ajudado!

4

Você pode usararray_filter () com umfecho (função inline):

<code>array_filter(
  $array,
  function ($element) use ($to_remove) {
    return strpos($element, $to_remove) === false;
  }
);
</code>

(Versão do PHP> = 5.3)

Perguntas relacionadas