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