I want to create objects with {a,b,c,d} and have an array of this objects:
[{1,1,3,5},{3,1,7,7},{3,5,7,1}]
Values a b c and d are generating in a lopp
How can I create that object? And how can I add into my array that objects?
Initialise an array: $array = array(); Add to an array: $array[] = "item"; // for your $arr1 $array[$key] = "item"; // for your $arr2 array_push($array, "item", "another item");
PHP allocates memory dynamically and what's more, it doesn't care what sort of object you store in your array. If you want to declare your array before you use it something along these lines would work: var $myArray = array(); Then you can store any object you like in your variable $myArray.
The Dynamic Variable (Arrays) All it does is tell you the index or key of the element and then the elements value. What you did here was dynamically create an array with values of 0-9 in that order.
Create an Array in PHP In PHP, there are three types of arrays: Indexed arrays - Arrays with a numeric index. Associative arrays - Arrays with named keys. Multidimensional arrays - Arrays containing one or more arrays.
There is no way to write object literals in PHP like you can in JavaScript or other languages.
The easiest way you can do this in PHP is using type casting
// associative array
$arr = ["a" => 1, "b" => 2, "c" => 3, "d" => 4];
// cast as object
$obj = (object) $arr;
// Or you could do it all in one line
$obj = (object) ["a" => 1, "b" => 2, "c" => 3, "d" => 4];
Check it out
echo $obj->a; // 1
echo $obj->b; // 2
echo $obj->c; // 3
echo $obj->d; // 4
echo json_encode($obj); // {"a":1,"b":2,"c":3,"d":4}
Your loop might look something like this
$objects = [];
for ($i=0; $i<4; $i++) {
// i'll just makeup some values for a,b,c,d here since i don't know
// how you are assigning them
$objects[] = (object) [
"a" => $i,
"b" => $i * 2,
"c" => $i * $i,
"d" => rand()
];
}
print_r($objects);
Output
Array
(
[0] => stdClass Object
(
[a] => 0
[b] => 0
[c] => 0
[d] => 102971157
)
[1] => stdClass Object
(
[a] => 1
[b] => 2
[c] => 1
[d] => 167903564
)
[2] => stdClass Object
(
[a] => 2
[b] => 4
[c] => 4
[d] => 1894248447
)
[3] => stdClass Object
(
[a] => 3
[b] => 6
[c] => 9
[d] => 929037839
)
)
And the JSON output
[
{"a":0,"b":0,"c":0,"d":102971157},
{"a":1,"b":2,"c":1,"d":167903564},
{"a":2,"b":4,"c":4,"d":1894248447},
{"a":3,"b":6,"c":9,"d":929037839}
]
EDIT
how I could order my array by attribute b?
First create two reusable comparators
function ascendingComparator($a, $b) {
if ($a > $b) return 1;
else if ($a < $b) return -1;
else return 0;
}
function descendingComparator($a, $b) {
return -1 * ascendingComparator($a, $b);
}
Then use usort to pass the b
property into the comparator
// sort ascending; lowest b value will be first in the array
usort($objects, function($x, $y) {
return ascendingComparator($x->b, $y->b);
});
echo json_encode($objects);
// OR sort descending; highest b value will be first in the array
usort($objects, function($x, $y) {
return descendingComparator($x->b, $y->b);
});
echo json_encode($objects);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With