所以,我有一个相当复杂的表单,表单字段被命名为符合PHP数组表示法,因此:
<input name='service[123][info]' value=''>
这当然按预期工作,我在$ _POST中获取数组,我清理然后保留在$ in。但是现在我想对它进行逆向工程,当我再次遍历表单时,我在$ in中有这个:
array(
123 => array(
"info" => "foo"
)
)
当我来到任何给定的表单字段时,我知道字段名称是“service [123] [info]”但是如何在发送的数组中找到“foo”?基本上,当我有这个字段的数据时,我想在输入中设置value =“”参数,数据保存在$ in数组中,但对数据的唯一引用是字符串“service [123] [信息]”。我应该使用regexp来解析该字符串吗?听起来不灵活。
基本上,我想要像:
$name = "service[123][info]";
$value = form_array_lookup($name, $in);
将$ value设置为$ name引用的$ in的正确值。我希望我能清楚自己。感谢您的任何评论。
答案 0 :(得分:1)
这是一个特定于案例的(因此,不是很理想)示例,但一般的想法是在项目之间只使用一个分隔符,explode
字符串,然后遍历结果,检查是否每个项目索引都存在。
function parse_array_path( $string,array $subject ){
// remove ending brackets
$string = str_replace( "]","",$string );
// "[" is now the sole delimiter
$part = explode( "[",$string );
// loop and check for each index in subject array
$i = reset( $part );
do{
if( ! isset( $subject[$i] ) ){
return null;
}
$subject = $subject[$i];
}
while( $i = next( $part ) );
return $subject;
}
示例用法:
<?php
$a = array(
"service"=>array(
123=>array(
"info"=>"hello, world"
)
)
);
$s = "service[123][info]";
print parse_array_path( $s,$a ); // "hello, world"
答案 1 :(得分:0)
使用'foreach'循环遍历数组,您可以按照任何顺序重新分配键或值。
foreach ($in AS $in_key => $in_val) {
foreach ($in_val AS $in_val_key => $in_val_val) {
// ASSIGN VALUES TO A NEW ARRAY IF YOU WISH
// YOU NOW HAVE $in_key, $in_val_key, $in_val_val
// THAT YOU CAN WORK WITH AND ASSIGN
$array[$in_val_val] = $in_val_key; // OR WHATEVER
}
}