Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create an array of objects in PHP dynamically

Tags:

arrays

object

php

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?

like image 359
LigaVirtual F1 Avatar asked Jun 21 '16 20:06

LigaVirtual F1


People also ask

How can I create dynamic array in PHP?

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");

How do you declare an array of objects in PHP?

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.

Is array dynamic in PHP?

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.

What are the 3 types of PHP arrays?

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.


1 Answers

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);
like image 180
Mulan Avatar answered Oct 31 '22 03:10

Mulan