vivis93
September 30, 2016, 10:22am
1
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.
vivis93
September 30, 2016, 10:48am
3
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
vivis93
September 30, 2016, 10:55am
6
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.
vivis93
September 30, 2016, 11:03am
8
$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?
vivis93
September 30, 2016, 11:28am
10
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()
vivis93:
$ar ->user_info
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();
}
vivis93:
The code works now.
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;
}
}