使用另一个数组中的键搜索数组值

时间:2016-03-09 23:16:33

标签: php arrays search key

我有两个结构几乎相同的数组。

第一个数组是$_POST数据,第二个数组包含正则表达式规则和其他一些用于数据验证的内容。

示例:

$data = array(
    'name' => 'John Doe',
    'address' => array(
        'city' => 'Somewhere far beyond'
    )
);

$structure = array(
    'address' => array(
        'city' => array(
             'regex' => 'someregex'
         )
     )
 );

现在我要检查

$data['address']['city'] with $structure['address']['city']['regex'] 

$data['foo']['bar']['baz']['xyz']  with $structure['foo']['bar']['baz']['xyz']['regex']

有关如何使用PHP函数实现此目的的任何想法吗?

<小时/> 编辑:我似乎找到了自己的解决方案。

$data = array(
    'name' => 'John Doe',
    'address' => array(
        'city' => 'Somewhere far beyond'
    ),
    'mail' => 'test@test.tld'
);

$structure = array(
    'address' => array(
        'city' => array(
            'regex' => 'some_city_regex1',
        )
    ),
    'mail' => array(
        'regex' => 'some_mail_regex1',
    )
);

function getRegex($data, $structure)
{
    $return = false;

    foreach ($data as $key => $value) {

        if (empty($structure[$key])) {
            continue;
        }

        if (is_array($value) && is_array($structure[$key])) {
            getRegex($value, $structure[$key]);
        }
        else {
            if (! empty($structure[$key]['regex'])) {
                echo sprintf('Key "%s" with value "%s" will be checked with regex "%s"', $key, $value, $structure[$key]['regex']) . '<br>';
            }
        }
    }

    return $return;
}

getRegex($data, $structure);

1 个答案:

答案 0 :(得分:0)

鉴于这些数组:

function validate ($data, $structure, &$validated) {
    if (is_array($data)) {
        foreach ($data as $key => &$value) {
            if (
                array_key_exists($key, $structure)
                and is_array($structure[$key])
            ) {             
                if (array_key_exists('regex', $structure[$key])) {
                    if (!preg_match($structure[$key]['regex'])) {
                        $validated = false;
                    }
                }

                validate($value, $structure[$key], $validated);
            }
        }
    }   
}

和这个功能:

$validated = true;

validate($data, $structure, $validated);

if ($validated) {
    echo 'everything validates!';
}
else {
    echo 'validation error';
}

您可以相互检查数组,并获得如下验证结果:

var node = svg.selectAll(".node")
        .data(nodes)
        .enter().append("g");//make groups

//add rectangle to the group
node.append("rect")
        .attr("class", "node")
        .attr("width", 120)
        .attr("height", 160)
        .style("fill", "#fff")
        .style("stroke", "black")
        .call(force.drag);
//add image to the group
    node.append("image")
  .attr("xlink:href", "https://github.com/favicon.ico")
  .attr("x", 16)
  .attr("y", 16)
  .attr("width", 100)
  .attr("height", 120);
啊,你找到了解决方案。很好。