플랫 어레이를 데이터베이스에 저장할 구분 문자열로 변환합니다.
PHP 어레이를 문자열로 변환하는 가장 좋은 방법은 무엇입니까?
내가 변수를 가지고 있다.$type여러 가지 유형의 배열입니다.
$type = $_POST[type];
각 엔트리를 다음과 같이 구분하여 데이터베이스에 단일 문자열로 저장합니다.|:
Sports|Festivals|Other
incode 사용
implode("|",$type);
json_encode()를 사용할 수 있습니다.
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
나중에 json_decode()를 사용하여 DB에서 문자열을 디코딩합니다.JSON은 나중에 사용할 수 있도록 어레이 관계를 그대로 유지합니다.
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array
왜 JSON: 대부분의 프로그래밍 언어에서 사용할 수 있습니다. php의 serialize() 함수에 의해 작성된 문자열은 PHP에서만 읽을 수 있습니다.또한 데이터베이스가 다른 프로그래밍 언어로 작성된 응용 프로그램 간에 공유되는 경우에는 이러한 문자열을 데이터베이스에 저장하는 것을 좋아하지 않습니다.
가장 좋은 방법 중 하나:
echo print_r($array, true);
아니요, 이렇게 데이터베이스에 단일 문자열로 저장하면 안 됩니다.
사용할 수 있습니다.serialize()그러나 이로 인해 데이터 검색, 작업 및 공간 낭비가 더욱 어려워집니다.
다른 부호화도 할 수 있지만 일반적으로 같은 문제가 발생하기 쉽습니다.
DB가 있는 이유는 이런 작업을 3회마다 수행할 수 있기 때문입니다.어레이를 저장하기 위한 테이블이 아니라 어레이로 나타낼 수 있는 테이블이 필요합니다.
예:
id | word
1 | Sports
2 | Festivals
3 | Classes
4 | Other
다음과 같은 표가 아니라 SQL 표에서 데이터를 선택합니다.
id | word
1 | Sports|Festivals|Classes|Other
관계형 데이터베이스에서 스키마를 그렇게 설계하는 것은 아닙니다. 스키마의 목적에 완전히 어긋납니다.
<?php
$string = implode('|',$types);
그러나 Inkognito가 옳습니다.아마도 그런 식으로 저장하고 싶지는 않을 것입니다.데이터베이스의 관계성을 완전히 낭비하는 것입니다.
serialize에 대해 고민하는 경우 json_encode()를 사용하는 것도 고려할 수 있습니다.
키와 가치를 절약할 수 있습니다.
function array2string($data){
$log_a = "";
foreach ($data as $key => $value) {
if(is_array($value)) $log_a .= "[".$key."] => (". array2string($value). ") \n";
else $log_a .= "[".$key."] => ".$value."\n";
}
return $log_a;
}
도움이 됐으면 좋겠는데
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");
$string_array = json_encode($data);
이제 이 $string_array 값을 데이터베이스에 삽입할 수 있습니다.
저장소 연관 배열의 경우 사용할 수 있습니다.serialize:
$arr = array(
'a' => 1,
'b' => 2,
'c' => 3
);
file_put_contents('stored-array.txt', serialize($arr));
로딩 방법unserialize:
$arr = unserialize(file_get_contents('stored-array.txt'));
print_r($arr);
하지만 크리에이티브 디나믹이 필요하다면.php배열이 있는 파일(예: 구성 파일)을 사용하여var_export(..., true);, 다음과 같이 합니다.
파일에 저장:
$arr = array(
'a' => 1,
'b' => 2,
'c' => 3
);
$str = preg_replace('#,(\s+|)\)#', '$1)', var_export($arr, true));
$str = '<?php' . PHP_EOL . 'return ' . $str . ';';
file_put_contents('config.php', $str);
어레이 값 가져오기:
$arr = include 'config.php';
print_r($arr);
사용할 수 있습니다.serialize:
$array = array('text' => 'Hello world', 'value' => 100);
$string = serialize($array); // a:2:{s:4:"text";s:11:"Hello world";s:5:"value";i:100;}
및 사용unserialize문자열을 배열로 변환하려면:
$string = 'a:2:{s:4:"text";s:11:"Hello world";s:5:"value";i:100;}';
$array = unserialize($string); // 'text' => 'Hello world', 'value' => 100
많은 방법들이 있다.
이를 위한 두 가지 가장 좋은 방법은
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
//ouputs as
{"a":1,"b":2,"c":3,"d":4,"e":5}
$b = array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
$results = print_r($b, true); // $results now contains output from print_r
으로는 PHP 른른른 、 PHPvar_export()'4'는 같습니다.
function varExport($expression, $return = true) {
$export = var_export($expression, true);
$export = preg_replace("/^([ ]*)(.*)/m", '$1$1$2', $export);
$array = preg_split("/\r\n|\n|\r/", $export);
$array = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [null, ']$1', ' => ['], $array);
$export = join(PHP_EOL, array_filter(["["] + $array));
if ((bool) $return) return $export; else echo $export;
}
여기서 찍었어요.
어레이($_POST 등)가 있어 키와 값을 유지할 필요가 있는 경우:
function array_to_string($array) {
foreach ($array as $a=>$b) $c[]=$a.'='.$b;
return implode(', ',$c);
}
결과: "name=Paul, age=23, city=Paul"
언급URL : https://stackoverflow.com/questions/7490488/convert-flat-array-to-a-delimited-string-to-be-saved-in-the-database
'programing' 카테고리의 다른 글
| WordPress Shortcode에서 AJAX를 사용하는 방법 (0) | 2022.11.20 |
|---|---|
| for 루프 내에서 JavaScript 클릭 핸들러가 예상대로 작동하지 않음 (0) | 2022.11.20 |
| 공백은 어떻게 잘라요? (0) | 2022.11.20 |
| Python에서 정규 표현과 일치하는 모든 항목을 찾으려면 어떻게 해야 합니까? (0) | 2022.11.20 |
| Eclipse를 실행하려면 JRE 또는 JDK를 사용할 수 있어야 합니다.다음 위치를 검색해도 JVM을 찾을 수 없습니다. (0) | 2022.11.20 |