How to separate string in array?

1

I have a descri_produto column that would be the product description.

The problem is that I can not separate the description into an array.

$cat = $_POST['categoria'];
$sql= "SELECT DISTINCT descri_produto, cat_produto FROM produtos WHERE cat_produto  LIKE '".$cat."'";
$result= mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0){
    while ($row = mysqli_fetch_assoc($result)){
        print_r(explode(',',$row['descri_produto']));
    }
}

Example column of product_description column

Espessura: 6mm,Cor: Incolor

You are currently returning:

Array
(
    [0] => Espessura: 6mm
    [1] => Cor: Incolor 
)

And I need something like:

Array
(
    [Espessura] =>  6mm
    [Cor] => Incolor 
)
    
asked by anonymous 12.06.2017 / 20:28

2 answers

1

You have to break into 2 parts, first break each field as you are doing, then break each field in key / value and put in an array. I created a function that does this, just pass the text that comes from MySQL and it returns the array in the format you need.

function quebra($descricao) {
    $campos = explode(',', $descricao);

    $array = [];

    foreach ($campos as $campo) {
        // o terceiro parametro do explode eh o numero maximo de valores
        // que o explode vai quebrar (2), se por acaso tiver no seu valor outro ':'
        list($chave, $valor) = explode(':', $campo, 2);

        // remove espacos extras
        $chave = trim($chave);
        $valor = trim($valor);

        $array[$chave] = $valor;
    }

    return $array;
}


$quebrado = quebra('Espessura: 6mm,Cor: Incolor');
var_dump($quebrado);

This code will print:

array(2) {
     ["Espessura"]=> string(3) "6mm"
     ["Cor"]=>  string(7) "Incolor"
}
    
12.06.2017 / 20:43
1

You can do this:

$cat    = $_POST['categoria'];
$sql    = "SELECT DISTINCT descri_produto, cat_produto FROM produtos WHERE 
cat_produto  LIKE '".$cat."'";
$result = mysqli_query($conn, $sql);
$data   = [];

if (mysqli_num_rows($result) > 0){
    while ($row = mysqli_fetch_assoc($result)){
        $_items = explode(',',$row['descri_produto']);
        foreach ( $_items as $item ) {
            $_data = explode(':', $item);
            $data[strtolower($_data[0])] = $_data[1];
        }
    }
}

echo '<pre>';
print_r($data);
die;

// Retorno do data
Array
(
    [espessura] =>  6mm
    [cor] =>  Incolor
)
    
12.06.2017 / 20:46