Skip to content

Instantly share code, notes, and snippets.

@mgng
Created February 4, 2014 05:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mgng/8798459 to your computer and use it in GitHub Desktop.
Save mgng/8798459 to your computer and use it in GitHub Desktop.
base64文字列を配列形式にする
<?php
/**
* @param string $str
* @return array
*/
function array_from_base64_decode( $str ) {
$table = preg_split('//', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', -1, PREG_SPLIT_NO_EMPTY);
$data = array();
for( $i=0, $l=count($table); $i<$l; $i++) {
$data[$table[$i]] = $i;
}
$a = array();
$b = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
$l = count( $b );
$b[$l - 1] === '=' && $l--;
$b[$l - 1] === '=' && $l--;
$b[$l - 1] === '=' && $l--;
$m = count($b) - $l;
for( $i=0, $j=0; $i<=$l-4; $i+=4 ) {
$k = ( $data[$b[$i]] << 18) | ($data[$b[$i+1]] << 12) | ($data[$b[$i+2]] << 6) | $data[$b[$i+3]];
$a[$j++] = $k >> 16 & 255;
$a[$j++] = $k >> 8 & 255;
$a[$j++] = $k & 255;
}
if($m == 1) {
$k = ($data[$b[$i]] << 18) | ($data[$b[$i+1]] << 12) | ($data[$b[$i+2]] << 6);
$a[$j++] = $k >> 16 & 255;
$a[$j] = $k >> 8 & 255;
} else if($m == 2) {
$k = ($data[$b[$i]] << 18) | ($data[$b[$i + 1]] << 12);
$a[$j] = $k >> 16 & 255;
}
return $a;
}
var_dump( array_from_base64_decode( "AQIDBA==" ) );
/*
array(4) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment