Reputation:
I am trying to define a 2d array in php. I have some concept code so you can see the situation:
class Testing {
protected $requiredFieldsByReferenceType = array(
['Book']['volume'] => true,
['Book']['source'] => true,
['Book Section']['volume'] => true,
['Book Section']['source'] => true,
['Chart or Table']['volume'] => true,
['Chart or Table']['source'] => true
);
print_r($requiredFieldsByReferenceType);
}//End Testing
The error that is thrown:
Parse error: syntax error, unexpected '[', expecting ')'
Upvotes: 2
Views: 9076
Reputation: 11
$arr1 = array(
array(value1,value2,value3),
array(value4,value5,value6),
array(value7,value8,value9),
);
Upvotes: 1
Reputation: 14898
It looks like you're mixing styles of appending to an array here.
try
$arr = array(
'key' => array ('key2' => 'value 1', 'key3' => 'value2'),
'key12' => array('key4' => 'value4')
);
or
$arr = array();
$arr['key1'] = array();
$arr['key2'] = array();
$arr['key1']['key3'] = 'value1';
(Please note my examples don't produce the same data structure, I was just demonstrating the different methods)
Upvotes: 0
Reputation: 47614
Do this instead:
$myArray = array(
'book' => array(
'item1' => true,
'item2' => true
),
'chest' => array(
'item1' => true,
'item2' => true,
)
);
By the way you shouldn't initialize your attribues like this. Rather use getters/setters.
class TestClass {
protected $_myArray;
public function __construct()
{
$this->setMyArray();
}
public function setMyArray()
{
$this->_myArray = array(
'book' => array(
'item1' => true,
'item2' => true
),
'chest' => array(
'item1' => true,
'item2' => true,
)
);
}
}
$foo = new TestClass();
print_r($foo);
Upvotes: 0
Reputation: 7851
The syntax to define an array is array(key0 => value0, key1 => value1, key2 => value2, ...)
. Since a two-dimensional array in PHP is just multiple arrays as values in an array, it would look like this:
$myArray =
array(
'Book' =>
array(
'item1' => true,
'item2' => true
),
'Chest' =>
array(
'item1' => true,
'item2' => false
)
);
Upvotes: 0
Reputation: 239988
Class TestClass {
protected $myArray = array(
"Book" => array('item1' => true, 'item2' => false),
"chest" => array('item1' => true, 'item2' => false),
);
}
Upvotes: 0
Reputation: 625387
PHP doesn't do multi-dimensional arrays. You must construct it as arrays of arrays.
protected $myArray = array(
'Book' => array(
'item1' => true,
'item2' => true,
),
'Chest' => array(
),
'item1' => true,
'item2' => false,
);
Upvotes: 0
Reputation: 655755
You have to use array()
inside the array value declarations too:
protected $myArray = array(
"Book" => array(
"item1" => true,
"item2" => true
),
"Chest" => array(
"item1" => true,
"item2" => false
)
);
Upvotes: 5
Reputation: 1153
Only the answers that assign the array in ONE statement are going to work in your context (defining a class property) unless you put them all in the constructor. By the same token, I don't think that print_r is going to work without being in a method...
Upvotes: 1
Reputation: 1411
Another way to do it is by nesting array() functions:
$requiredFieldsByReferenceType = array(
'Book' => array('volume' => true,
'source' => true),
'Book Section' => array('volume' => true,
'source' => true),
...
);
Upvotes: 0
Reputation: 53606
The other answers are good.
The syntax using array() is:
$requiredFieldsByReferenceType = array('Book'=>array('volume' => true,
'source' => true),
'Book Section'=>array('volume' => true,
'source' => true)
);
Upvotes: 5
Reputation: 9891
$requiredFieldsByReferenceType ['Book']['volume'] = true;
$requiredFieldsByReferenceType ['Book']['source'] = true;
$requiredFieldsByReferenceType ['Book Section']['volume'] = true;
Upvotes: 1