Php Array - Associating data

0

Hello, I would like to associate the chosen data in checkbox, with those of an input. I have one side, a list of results, where I will select in a checkbox, and each one will receive a new value chosen by the user.

For example: On the screen appears Car1, car2 and car3. The user chooses car1 and car2, and sets car1 to be called volks, and car2 will be called ford.

Then when submitting, I'll have the following code to perform this operation:

No layout assim:
<input type="checkbox" name="carro[]" />
<input type="text" name="nome_definido_usuario[]" />



E no processamento:
    <?php
        $carro = $_POST['carro'];
        $nome_definido_usuario= $_POST['nome_definido_usuario'];

        $carro_implode = implode("",$carro);
        $nome_definido_usuario_implode = implode("",$nome_definido_usuario);
    ?>

If I echo an $ car_implode and $ _implode_user_name, I can see the result at random, like Car1, Car2, Volks, Ford . But how do I make the result appear in an associated way, such as:
Car1: Volks
Carro2: Ford

Would you still know?

    
asked by anonymous 16.01.2018 / 17:43

4 answers

1

To make the association, I think it gets better this way. Because if any checkbox is not checked, the index is not lost:

<?php
if( $_POST ) {
    foreach( $_POST['carro'] as $key => $value ) {
        echo 'Carro '.$value.': ' . $_POST['nome_definido_usuario'][$value].'<br />';
    }
}
?>

<form method="post">
    <input type="checkbox" name="carro[]" value="1" />
    <input type="text" name="nome_definido_usuario[1]" /> <br />

    <input type="checkbox" name="carro[]" value="2" />
    <input type="text" name="nome_definido_usuario[2]" /> <br />

    <input type="checkbox" name="carro[]" value="3" />
    <input type="text" name="nome_definido_usuario[3]" /> <br />

    <input type="submit" value="Enviar" />
</form>
    
16.01.2018 / 18:29
1

You can make this association using the array_combine function. This function will return a new associative array from two arrays reccebido as parameter, where the first will be used as keys and the second as value of the keys of the first. Emplementing is:

<?php
//exemplo de dados submetidos pelo formulario
$_POST['carro'] = ['Carro 1', 'Carro 2'];
$_POST['nome_definido_usuario'] = ['Volks', 'Ford'];

$carros = $_POST['carro'];
$nomes = $_POST['nome_definido_usuario'];

//essa função vai criar um novo array associativo, usando 
//como chave o primeiro e o segundo como os valores de cada chave do primeiro
$carrosNomes = array_combine($carros , $nomes);

//mostrando o conteudo
var_dump($carrosNomes);
echo $carrosNomes['Carro 1'] . '<br>';
echo $carrosNomes['Carro 2'] . '<br>';

//ou de forma mais completa
foreach($carrosNomes as $carro => $nome){
    echo '<br>' . $carro . ': ' . $nome . '<br>';
}

?>

This generates as output:

//saida do var_dump
array(2) { ["Carro 1"]=> string(5) "Volks" ["Carro 2"]=> string(4) "Ford" } 

//acessando chaves do aray $carrosNomes
Volks
Ford

//imprimindo chave e valor de cada elemento do array $carrosNomes
Carro 1: Volks

Carro 2: Ford

Tip: You could join the input with name car and username_username into one. Something like:

<input type="checkbox" name="carro[]" value="Volks">
<input type="checkbox" name="carro[]" value="Ford">

Example running

In any file place the code below:

<?php

if(isset($_POST['carro'])){

$carros = $_POST['carro'];
$nomes = $_POST['nome_definido_usuario'];

//essa função vai criar um novo array associativo, usando 
//como chave o primeiro e o segundo como os valores de cada chave do primeiro
$carrosNomes = array_combine($carros , $nomes);

//mostrando o conteudo
var_dump($carrosNomes);
echo $carrosNomes['Carro 1'] . '<br>';
echo $carrosNomes['Carro 2'] . '<br>';

//ou de forma mais completa
foreach($carrosNomes as $carro => $nome){
    echo '<br>' . $carro . ': ' . $nome . '<br>';
}

}
?>

<form method="post">
    <!--É necessario definir um valor para os inputs carro, pis o valor 
    padrão é on, o que pode causar sobrescrita-->
    <input type="checkbox" name="carro[]" value="Carro 1" />
<input type="text" name="nome_definido_usuario[]" />
    <input type="checkbox" name="carro[]" value="Carro 2" />
<input type="text" name="nome_definido_usuario[]" />
    <input type="submit">
</form>

When the form is subfolded the same file will be executed, and the php snippet will be interpreted, generating the expected output.

Solution to stop joining these two arrays

Just use a little javascript to copy (the value) the content from one input to another.

<?php

if(isset($_POST['carro'])){

$carros = $_POST['carro'];

//mostrando o conteudo
var_dump($carros);

//ou de forma mais completa
foreach($carros as $carro => $nome){
    echo '<br>' . $carro . ': ' . $nome . '<br>';
}

}
?>

<form method="post">
    <!--É necessario definir um valor para os inputs carro, pis o valor 
    padrão é on, o que pode causar sobrescrita-->
    <div>
        <input type="checkbox" name="carro[]" value="" class="carros"/>
        <input type="text" name="nome_definido_usuario[]" class="nomes" />
    </div>
    <div>
        <input type="checkbox" name="carro[]" value="" class="carros"/>
        <input type="text" name="nome_definido_usuario[]" class="nomes"/>
    </div>
    <input type="submit">
</form>

<script>
    var nomesDefinidos = document.querySelectorAll('.nomes');

    for (var i = 0; i < nomesDefinidos.length; i++) {
        nomesDefinidos[i].addEventListener('change', function(){
            this.parentElement.querySelector('.carros').value = this.value;
        });
    }
</script>

Basically a class has been given for each input (user defined name), added a change event (when something is written in the input and the focus changes), then the value entered in the input will be set as input checkbox

    
16.01.2018 / 18:35
0
    $carro = $_POST['carro'];
    $nome_definido_usuario= $_POST['nome_definido_usuario'];

    $arrayCarros = array($carro => $nome_definido_usuario);
    
16.01.2018 / 18:16
-1

The correct way would be to use an associative array or create an object

<?php
     $carro = $_POST['carro'];
     $nome_definido_usuario= $_POST['nome_definido_usuario'];

     $arrayCarros = array($carro => $nome_definido_usuario);
?>
    
16.01.2018 / 17:57