1 php arrays variables brackets square-bracket
我想将方括号字符串存储在变量中,以便我可以使用该变量来获取数组的值.我怎样才能做到这一点?
例:
$vehicle = array("car"=>"volvo","bike"=>"polygon");
$bracket1="['car']";
$bracket2="['bike']";
echo $vehicle.$bracket1;//my expected result = 'volvo';
echo $vehicle.$bracket2;//my expected result = 'polygon';
Run Code Online (Sandbox Code Playgroud)
案例假设我有这些数据
$data = array(
"vehicles"=>array(
array(
"name"=>"volvo",
"manufacturer"=>"abc",
"color"=>array("blue"=>"wonderful","red"=>"fantastic")),
array(
"name"=>"toyota",
"manufacturer"=>"def",
"color"=>array("blue"=>"awesome","red"=>"good")),
array(
"name"=>"mecedes",
"manufacturer"=>"ghi",
"color"=>array("blue"=>"nice","red"=>"great","green"=>"good","brown"=>"elegant")),
));
$fields = array(
"$data['vehicles']['name']",
"$data['vehicles']['manufacturer']",
"$data['vehicles']['color']['blue']",
"$data['vehicles']['color']['red']"
);
//a function to print those data according to user parameter($fields, it may uncertain pattern)
function get_data($data,$fields){
for($c=0;$c<count($data);$c++){
foreach($fields as $field){ //field to show
echo $field;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
$data = array(
"vehicles"=>array(
array(
"name"=>"volvo",
"manufacturer"=>"abc",
"color"=>array("blue"=>"wonderful","red"=>"fantastic")),
array(
"name"=>"toyota",
"manufacturer"=>"def",
"color"=>array("blue"=>"awesome","red"=>"good")),
array(
"name"=>"mecedes",
"manufacturer"=>"ghi",
"color"=>array("blue"=>"nice","red"=>"great","green"=>"good","brown"=>"elegant")),
));
$c=0;
$fields = array( // note added zeros here... these are your "vehicle" array key
"{$data['vehicles'][$c]['name']}",
"{$data['vehicles'][$c]['manufacturer']}",
"{$data['vehicles'][$c]['color']['blue']}",
"{$data['vehicles'][$c]['color']['red']}"
);
for($c=0;$c<count($data['vehicles']);$c++){
foreach($fields as $field) {
echo $field . PHP_EOL;
}
}
//the output print : volvo abc wonderful fantastic volvo abc wonderful fantastic volvo abc wonderful fantastic
//the output expectetd : volvo abc wonderful fantastic toyota dev awesome good mercedes ghi nice great
Run Code Online (Sandbox Code Playgroud)
你为什么不试试这个:
$vehicle = array("car" => "volvo", "bike" => "polygon");
$bracket1 = "car";
$bracket2 = "bike";
echo $vehicle[$bracket1]; //my expected result = 'volvo';
echo $vehicle[$bracket2]; //my expected result = 'polygon';
Run Code Online (Sandbox Code Playgroud)
编辑:你想要一个能够做到这一点的功能......你不需要它.这是一个基本的PHP语言结构.
Anywho,这是你的函数(将基本的PHP语言包含在一个额外的层中) - 我甚至会抛出一个基本的错误检查(如果数组键不存在则返回false):
function searchMyHugeArrayForSomething($huge_array, $something) {
if(!array_key_exists($something, $huge_array))
return false; // return false if array key doesn't exist
return $huge_array[$something]; // return your desired result......
}
Run Code Online (Sandbox Code Playgroud)
演示:
$my_huge_array = array(
'pet' => 'cat',
'wife' => 'sarah',
'brother' => 'john'
// etc
);
echo searchMyHugeArrayForSomething($my_huge_array, 'wife'); // sarah
echo searchMyHugeArrayForSomething($my_huge_array, 'husband'); // returns false (oop, sexist!)
echo searchMyHugeArrayForSomething($my_huge_array, 'brother'); // john
// etc............?
Run Code Online (Sandbox Code Playgroud)
合理?
编辑:好的,多维数组非常不同(你原来的问题是平的).你是因为你在两者之间缺失的水平在这里有一个问题vehicles,并name等有一个阵中还有包含数字索引,所以您的路径将实际上是$data['vehicles'][0]['name']-当是那样的话,你可以基本上只是echo每个阵列的行获取解析为字符串的数组键的值.
在这个例子中,我已经为每一行添加了两个花括号作为变量变量进行解析,并且因为你的例子实际上不会按原样运行(它试图将数组键解析为变量并在语法上失败),并添加零数组键.您需要确定自己要定位的数组键,这只是使用第一个:
$fields = array( // note added zeros here... these are your "vehicle" array key
"{$data['vehicles'][0]['name']}",
"{$data['vehicles'][0]['manufacturer']}",
"{$data['vehicles'][0]['color']['blue']}",
"{$data['vehicles'][0]['color']['red']}"
);
foreach($fields as $field) {
echo $field . PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)
输出:
volvo
abc
wonderful
fantastic
Run Code Online (Sandbox Code Playgroud)