Extract portion of characters using PHP

2

Hello everyone, 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 transform this string into an array: [1990 => 1, 1694 => 2 , 1995 => 4]

PS: You do not need to post the whole code. A light how to do it will help me a lot.

    
asked by anonymous 27.03.2018 / 04:17

2 answers

3

A simple way to do this is to use 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 array_combine method will combine the array $Keys and the array $Values , being% with% keys and $Keys values, thus reaching the result $Values

  

You can see it working at repl.it

    
27.03.2018 / 07:32
2

I hope the code below will help 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>';
    
27.03.2018 / 06:37