将关联数组中的单个密钥编码为base64

时间:2016-05-01 18:38:23

标签: php arrays foreach base64 associative-array

我正在尝试从SQL表中检索用户数据,其中一列是blob_medium。我正确运行SQL查询并获取php脚本中的数据。

if(mysqli_num_rows($result)){
    while($row=mysqli_fetch_assoc($result)){
        $result_array['user_data'][]=$row;
    }
}

现在,为了对这些数据进行json_encode,我需要将user_pic列的数据编码为base 64.为此,我正在尝试这个。但是,我似乎做错了什么。任何形式的帮助将不胜感激。

foreach($result_array as $key){
      foreach($key as $key2){
            //print_r(base64_encode($key2['user_pic']).'<br/>'.'<br/>');
            $key2['user_pic'] = base64_encode($key['user_pic']);
           //print_r(($key['user_pic']).'<br/>'.'<br/>');
      }
}

当我取消注释print_r语句时,我的数据以base64格式打印,但assoc数组的数据没有改变。

2 个答案:

答案 0 :(得分:1)

这是因为for循环中的数组$key$keys是副本。如果您希望它们修改原件,您可以通过将它们指定为引用来实现,而不是复制:

 foreach($result_array['user_data'] as &$key){
        $key['user_pic'] = base64_encode($key['user_pic']);
  }

或者通过显式索引进入原文:

 foreach($result_array['user_data']  as $index => $key){
        $result_array['user_data'][$index] ['user_pic'] = base64_encode($key['user_pic']);
 }

答案 1 :(得分:0)

那是因为您正在更改$key2数组。由foreach循环创建的临时值。我自己会建议在这种特定情况下使用for循环,因为我被告知如果我可以阻止循环,就不要在循环中使用循环,这会让事情变得更容易阅读:

for($i=0; $i < count($result_array['user_data']); $i++){
 $encodedUserPic = base64_encode($result_array['user_data'][$i]['user_pic']);
 $result_array['user_data'][$i]['user_pic'] = $encodedUserPic;
}