Extract portion of characters using PHP

Asked

Viewed 70 times

2

Hello guys I have the following string:

'<a href="http://localhost/mensageiro/1990/">1990</a>&nbsp;(1)
<a href="http://localhost/mensageiro/1994/">1994</a>&nbsp;(2)
<a href="http://localhost/mensageiro/1995/">1995</a>&nbsp;(4)'

How to turn this string into an array: [1990 => 1, 1694 => 2 , 1995 => 4]

PS: You don’t need to post the whole code. A light of how to do it will help me enough.

2 answers

3


A simple way to do it is by using the methods preg_match_all and array_combine.

function extrair($str) {
  # Extrai o número de dentro da tag a
  preg_match_all("|<[^>]+>(.*)</[^>]+>|", $str, $Keys, PREG_PATTERN_ORDER);
  # Extrai o número de dentro dos parênteses
  preg_match_all("|\(([\d])\)|", $str, $Values, PREG_PATTERN_ORDER);
  # Combina os arrays
  return array_combine($Keys[1], $Values[1]);
}

The method array_combine will combine the array $Keys and the array $Values, being $Keys the keys and $Values values, thus reaching the result [1990 => 1, 1694 => 2 , 1995 => 4]

You can see it working in repl it.

  • Look you’re good. Thank you !

  • I’m just an apprentice! :)

2

I hope the code below helps you friend!

  function apenasNumero($valor)
  {
      $num = preg_replace( '/[^0-9]/is', '', $valor ); //preg_replace( '/[^0-9]/is... retira tudo que não for número
     return $num;
  }

  function resolveProblema($string)
  {
     //iniciando um novo array
     $novo = array();

     //Como vi que todas as linhas terminam com ")"
     $vetor = explode(")",$string); //transformo em um vetor

    //string padrão até encontrar o primeiro número
    $pontos = '<a href="http://localhost/mensageiro/'; //ou seja, a string que eu quero retirar 

     //navegando pelas possições do vetor
     foreach($vetor as $val)
     {
        //retirando string (padrão) do valor
        $result = str_replace($pontos, "", $val);


        $primeiroValor = apenasNumero(substr($result,0,7)); //pagando apenas o valor numérico

        //pegando o valor dos 4 ultimos caracteres da string
        $segundoValor = apenasNumero(substr($result,-4));

        //criando indices do novo vetor
        $novo[$primeiroValor] = $segundoValor;
     }

     // Como sei que a ultima possição do array vem vazio
     array_pop($novo); //elimino a ultima possição

     return $novo;
  }

  //string que vc utilizou no problema
  $string = '<a href="http://localhost/mensageiro/1990/">1990</a> (1)
  <a href="http://localhost/mensageiro/1994/">1994</a> (2)
  <a href="http://localhost/mensageiro/1995/">1995</a> (4)';

 //uso a tag <pre> só para visualizar melhor
 echo '<pre>';
 print_r(resolveProblema($string));
 echo '</pre>';

Browser other questions tagged

You are not signed in. Login or sign up in order to post.