You can make this association using the function array_combine
. This function will return a new associative array from two arrays raised as parameter, where the first will be used as keys and the second as the value of the keys of the first. Emplementando:
<?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 merge input with car name and user name into one. Something like:
<input type="checkbox" name="carro[]" value="Volks">
<input type="checkbox" name="carro[]" value="Ford">
Working example
In any file put 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>
At subter the form the same file will be executed, and the snippet in php will be interpreted, generating the expected output.
Solution to stop joining these two arrays
Just use a little javascript to copy (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 was given for each input (user defined name), added a change event (when something is written in the input and the focus changes), then the input value will be set as input checkbox value.
Almost.. The user name is coming empty... as if there was nothing reported in the field by the user..
– Neo
Did you put the number between the brackets? The number that is in the car value[] has to be in the bracket of the username. Type this: name="user_name[2]"
– Givanildo R. de Oliveira
I didn’t, because I’m using data from the comic book, with while
– Neo