Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Associative array from form inputs

Tags:

html

php

I'm building a calculator for a mmo guild. At this moment I'm looking for a way to make data more easy to access for calcules.

Basically, I have a form with 5 text fields (just for test, there will be a lot more), and a select list (for choose the proper equation).

Example code:

<input type="text" id="strength" name="strength" value="0">
<input type="text" id="dexterity" name="dexterity" value="0">
<select name="equation" id="equation">
    <option name="damage" id="damage">Damage</option>
    <option name="defense" id="defense">Defense</option>
</select>

So this form will be procesed through a php file.

<form action="file.php" method="post">
    //inputs here
    <input type="submit" value="calculate">
</form>

At this moment I'm receiving all data in php file with vars:

$strength = (int)$_POST['strength'];
$dexterity = (int)$_POST['dexterity'];

For start is ok, but when my script is complete there will be more than 20 fields... so I wanna store all data in an array, something like this:

$strength = array(
'fuerza' => 125, 
'dexterity ' => 125,
//and more fields...
);

And use this data in various different functions for equations:

function equation1()
{
    $damage = $stats['dexterity'] + $stats['strength'];
}

I have read several posts and tutorials about use name value from inputs for create an array somethin like this: name="name[]". But doesn't work for me how I want. This calculator will receive just 1 value for each "stat", and I need have all these values in an array so I can access them from different fuctions in my script.

Please ask me if my question is not clear, and sorry if my english is bad.

EDIT AFTER SOLVE

I let here my code after solve:

.html example:

<input type="text" id="strength" name="stats[strength]" value="0">
<input type="text" id="dexterity" name="stats[dexterity]" value="0">
<select name="operation" id="operation">
    <option name="damage" id="damage">Damage</option>
    <option name="defense" id="defense">Defense</option>
</select>

.php example:

function critOp($stat)
{
    $result = $stat * 0.00725;
    return $result;
}
switch($_POST['operation']){
case 'damage' : 
    $critical = critOp($_POST["stats"]["dexterity"]);
    break;
//more case...
like image 224
3DM Avatar asked Jun 24 '26 11:06

3DM


1 Answers

You can use brackets in the name field to direct PHP to stick them in an array. If you use [] it will form a numerical array, but you can specify an associative key in the brackets like [dexterity]

<input type="text" id="dexterity" name="strength[dexterity]" value="125">
<input type="text" id="fuerza" name="strength[fuerza]" value="125">

This will result in

$_POST['strength'] = array(
'dexterity' => 125, 
'fuerza ' => 125,
);

Bonus points

You can continue to enforce integer values by using array_map:

$_POST['strength'] = array_map('intval', $_POST['strength']);

This will make sure all values are integers.

like image 54
Devon Avatar answered Jun 26 '26 00:06

Devon



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!