2016-05-01 3 views
2

Я пытаюсь получить данные пользователя из таблицы SQL, где один из столбцов - blob_medium. Я правильно выполняю SQL-запрос и получаю данные в php-скрипте.Кодирование одного ключа в ассоциативном массиве base64

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

Теперь, чтобы json_encode этих данных, мне нужно кодировать данные User_pic столбца базы 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, но данные массива ДООС не меняется.

ответ

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; 
} 
+1

Я все еще использую foreach, но обойдусь внешним контуром. – Ray

+0

Это сработало, спасибо человеку (Y). –

1

Это потому, что массивы $key и $keys в цикле for являются копиями. Если вы хотите, чтобы изменить оригинал вы можете сделать это, указав их как ссылки, не копии:

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']); 
} 
+0

Я лично считаю, так как нет необходимости в цикле внутри цикла. Было бы намного проще создать один цикл 'for' для этой конкретной ситуации. Реквизиты для ввода быстрее меня, хотя;) – NoobishPro

+0

@Babydead хорошая точка, просто заметили явное использование только индекса user_data в исходном массиве результатов – Ray

+0

И я полностью пропустил, что вы можете сохранить foreach неповрежденным, выполнив его (обновленный) способ. Это делает мой ответ излишним, но я оставлю его в любом случае. Я буду перенаправлять вас за перехитрить и перегнать меня: ') – NoobishPro