PHP表单数组表示法,反转?

时间:2014-02-10 20:53:47

标签: php arrays forms

所以,我有一个相当复杂的表单,表单字段被命名为符合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的正确值。我希望我能清楚自己。感谢您的任何评论。

2 个答案:

答案 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

    }

}