Help in multi-dimensional arrays!

I need to make an array like this below

Array
(
    [user] => 1
        (
            [name] => a
            [surname] => b
        )
    [user] => 2
        (
            [name] => c
            [surname] => d
        )
)

i tried this

$ar = array ( 'user' =>
                array('name' => 'a', 'surname' => 'b'),
                array('name' => 'c', 'surname' => 'd'),

);
print_r($ar);

but i get this

Array
(
    [user] => Array
        (
            [name] => a
            [surname] => b
        )

    [0] => Array
        (
            [name] => c
            [surname] => d
        )

)

Some help please

You can’t make an array like this.
So better change your requirements.

Which part cant be done the keys with name user or the values at them, I found [THIS] (http://stackoverflow.com/questions/17850353/array-merge-on-multidimensional-array) there i can see value on the first key.

With keys that have equal names, which is a nonsense. When you’re going to access an array element with $array['user'], how can it tell which one you want?

Got ya.

$ar = array (
    'user' => array (
        array('name' => 'a', 'surname' => 'b'),
        array('name' => 'c', 'surname' => 'd'),
    )
);

is what you want

Ok the keys with have different numbers

Array
(
    [0] => Array
        (
            [name] => a
            [surname] => b
        )

    [1] => Array
        (
            [name] => c
            [surname] => d
        )

)

Can i assign keys, because the user id i have are not in numerical order eg. 1,3,4,7,10.

Yes, you can. You always can assign a key.
Just do it the same way as you did in your innermost array.

$ar = array (
    1 => array('name' => 'a', 'surname' => 'b'),
    3 => array('name' => 'c', 'surname' => 'd'),
    5 => array('name' => 'c', 'surname' => 'd'),
    7 => array('name' => 'c', 'surname' => 'd'),
    10 => array('name' => 'c', 'surname' => 'd'),

);
print_r($ar);

Now its ok , can i set key from an array doing lop.
$key = array(1,3,5,7,10);

to me it won’t make much sense. Why would you want to assign exactly the same value to all array members?

I have a table in db where i have address ,country and id , i want to assign name and username from array $ar to that table with the same id.

Can you help me to achieve this ?

I don’t understand your problem, sorry. If you want to assign just equal names and usernames to all rows from a database, then you don’t need an array for that.

I suppose what you really need is an SQL query with JOIN.
Can you explain the main, original task you are working on? Without any arrays or database stuff? How it’s worded in the task description you got?

I come so far and i get an error.

$ar = array ('user_info' => array (
    array('id'=> 1, 'name' => 'a', 'surname' => 'b'),
    array('id'=> 2, 'name' => 'c', 'surname' => 'd'),
    array('id'=> 3, 'name' => 'c', 'surname' => 'd'),
    array('id'=> 4, 'name' => 'c', 'surname' => 'd'),
    array('id'=> 5, 'name' => 'c', 'surname' => 'd'),

);
foreach($ar ->user_info as $info) {
        $id= $info->id;
        $name = $info->name;
        $surname = $info->surname;

$sql = "UPDATE db SET user_name=$name , user_surname=$surname  WHERE Id=$id";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}


$conn->close();
}

The error

PHP Notice: Trying to get property of non-obj
PHP Warning: Invalid argument supplied for foreach()

This kind of syntax is used for objects. In your code, $ar is an array.

Ok , how to assign to variables the values from that array ?

Have you tried $ar['user_info'] in your foreach loop instead? Change all the other expressions inside that loop to array syntax also.

You failed to explain what are you doing.

The code works now.

$ar = array (
    array('id'=> 1, 'name' => 'a', 'surname' => 'b'),
    array('id'=> 2, 'name' => 'c', 'surname' => 'd'),
    array('id'=> 3, 'name' => 'c', 'surname' => 'd'),
    array('id'=> 4, 'name' => 'c', 'surname' => 'd'),
    array('id'=> 5, 'name' => 'c', 'surname' => 'd'),

);
foreach($ar as $info) {
    $id= $info['id'];
    $name = $info['name'];
    $surname = $info['surname'];

    $sql = "UPDATE db SET user_name=$name , user_surname=$surname  WHERE Id=$id";

    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }


    $conn->close();
}

I see you changed the array structure by removing a nesting level.

from

$ar = array ('user_info' => array (
    array('id'=> 1, 'name' => 'a', 'surname' => 'b'),

to

$ar = array (
    array('id'=> 1, 'name' => 'a', 'surname' => 'b'),

This code shouldn’t work due to syntax errors in SQL.

Finally i achieved to do what I needed .
Hope its useful All the best

$ar = array (
    array('id'=> 1, 'name' => 'a', 'surname' => 'b'),
    array('id'=> 2, 'name' => 'c', 'surname' => 'd'),
    array('id'=> 3, 'name' => 'c', 'surname' => 'd'),
    array('id'=> 4, 'name' => 'c', 'surname' => 'd'),
    array('id'=> 5, 'name' => 'c', 'surname' => 'd'),
);

for ($x = 0; $x <= count($ar)-1; $x++) {
    $id = $ar[$x]['id'];
    $name =$ar[$x]['name'];
    $surname = $ar[$x]['surname'];
    $sql = "UPDATE db  SET user_name='$name' , user_surname='$surname'  WHERE Id = $id ";

    if ($conn->query($sql) === TRUE) {
        echo "New record updated successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
}