微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何通过引用在多维数组中动态设置值

这整晚都让我疯狂.基本上,我需要在清理值之后在多维数组中设置一个特定值,然后再次(可能,取决于验证;如果验证失败,则需要将值设置为空字符串)验证该值之后.假设我有这个帖子数组:
$data['should']['be']['int'] = ' yjd';

使用filter_var($value,FILTER_SANITIZE_NUMBER_INT)清理值后;我收到一个空字符串.然后我需要以某种方式将$data [‘should’] [‘be’] [‘int’]的值设置为空字符串.

然后将此值传递给验证函数,该函数失败,导致空字符串不是整数.同样,那个经验证的值需要在$data [‘should’] [‘be’] [‘int’]中设置为空字符串.

在整个验证过程开始之前,我将所有相关的密钥保存在一个数组中,所以当我需要清理或验证时,我有这样的东西:

$keys = array(
    0 => 'should',1 => 'be',2 => 'int'
);

我试图在foreach循环中使用上面的键访问$data数组,引用& $data数组来设置新值,但无论我怎么做都无法使用.以上只是一个简化的例子.整个事情是验证类的一部分,所以我不知道传递的$data数组的确切深度.

任何指针将不胜感激!谢谢你的帮助!

编辑:
以为我无法编辑帖子,但它最终只是我的互联网连接.请忽略我在下面的评论.无论如何,这是一个我尝试递归调用方法

protected function set_value( &$data,$value ) {
    foreach( $data as &$val ) {
        if( is_array( $val ) ) {
            $this->set_value( $val,$value );
        } else {
            $val = $value;
        }
    }
}

为了开始循环我做了这个:

$this->set_value( $data[$keys[0]],$value );
你可以试试
$data = array();
$keys = array(
        0 => 'should',2 => 'int'
);

$value = 'yjd';



echo "<pre>";
setValue($data,$keys,$value);
print_r($data);

产量

Array
(
    [should] => Array
        (
            [be] => Array
                (
                    [int] => yjd
                )

        )

)

使用的功能

function setValue(&$data,$path,$value) {
    $temp = &$data;
    foreach ( $path as $key ) {
        $temp = &$temp[$key];
    }
    $temp = $value;
    return $value ;
}

原文地址:https://www.jb51.cc/php/135528.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐