문자열 PHP로 배열?


282

PHP 배열을 문자열로 변환하는 가장 좋은 방법은 무엇입니까? 유형 배열 인
변수 $type가 있습니다.

$type = $_POST[type];

각 항목을 다음과 같이 구분하여 데이터베이스에 단일 문자열로 저장하고 싶습니다 |.

스포츠 | 축제 | 기타


24
직렬화 된 값을 데이터베이스에 삽입하지 마십시오. 이유는 다음과 같습니다. stackoverflow.com/questions/7364803/…
NullUserException

14
@NullUserException ఠ_ఠ DB에 직렬화 된 값을 삽입하면 눈에 화상을 입을 수는 있지만 동의하지는 않습니다.
AngryHacker

4
이 질문을 다시 열어야한다고 생각합니다. 초보자에게는 유용한 질문이며 주제가 맞지 않다고 생각합니다.
SaidbakR

1
배열의 일부 값에 문자가 있으면 어떻게됩니까 |
sumit

그런 다음 해당 문자를 벗어날 수 있습니다. 여기에서 읽어보세요. php.net/manual/en/regexp.reference.escape.php
FortuneSoldier

답변:


352

단순히 implode를 사용하십시오

implode("|",$type);

13
$_POST배열 이름이 지정된 양식 입력을 사용 하는 경우 발생할 수있는 중첩 배열이없는 경우에 좋습니다.
Leith

중첩 배열에서는 foreach를 사용하면 작동합니다.
deepcell

224

json_encode ()를 사용할 수 있습니다

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
?>

나중에 json_decode () 를 사용 하여 DB에서 문자열을 디코딩하십시오. 다른 것은 쓸모가 없으며 JSON은 나중에 사용하기 위해 배열 관계를 그대로 유지합니다!


40
" 데이터를 정규화하는 것을 제외하고 는 다른 것은 쓸모가 없습니다 ..."
Dan Lugg 2016 년

5
Rofl @ 위의 의견. 당신이 말했듯이, 담요 진술은 거의 항상 도움이되지 않습니다.
Aaron Cole

12
나는 당신이 즐겁게 기뻐요 :)
Jakub

16
"절대적인 일반화와 절대화는 항상 잘못되었습니다. 항상." ;)
Olie

나는 이것이 키를 유지하는 것을 좋아한다. 이것은 나중에 사용하기에 매우 유용합니다.
Apolymoxic

45
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array

왜 JSON : 대부분의 프로그래밍 언어와 함께 사용할 수 있으며 PHP의 serialize () 함수로 생성 된 문자열은 PHP에서만 읽을 수 있으며 데이터베이스가 작성된 응용 프로그램간에 데이터베이스를 공유하는 경우 데이터베이스에 이러한 내용을 저장하고 싶지 않습니다 다른 프로그래밍 언어


1
JFI를 사용하면서 $ data = json_decode ($ jsonString, true)를 호출해야했습니다.
Terminality

두 번째 인수는 선택 사항입니다. 대부분의 경우에는 그렇지 않습니다.
sumit

이것은 단일 또는 다차원 배열에 우수하며 제 의견으로는 이것이 받아 들여야합니다. 또한 두 번째 매개 변수로 true를 추가하는 것도 고려하십시오.
결합

36

아니요, 데이터베이스에 단일 문자열로 저장하고 싶지 않습니다.

사용할 수는 serialize()있지만 데이터 검색이 어려워지고 작업하기가 어려워지고 공간이 낭비됩니다.

다른 인코딩도 할 수 있지만 일반적으로 동일한 문제가 발생하기 쉽습니다.

DB가있는 모든 이유는 이처럼 사소한 작업을 수행 할 수 있기 때문입니다. 배열을 저장하기 위해 테이블이 필요하지 않으며 배열로 나타낼 수있는 테이블이 필요합니다.

예:

id | word
1  | Sports
2  | Festivals
3  | Classes
4  | Other

다음과 같은 테이블이 아닌 SQL을 사용하여 테이블에서 데이터를 선택하면됩니다.

id | word
1  | Sports|Festivals|Classes|Other

이것이 관계형 데이터베이스에서 스키마를 설계하는 방식이 아니며, 그 목적을 완전히 무너 뜨립니다.


2
확실히, 당신은 구분 기호를 벗어날 필요가 없습니다!
Chris G.

2
@MarcB 인코딩 바보 방지, 표준, 버그 발생이 적으며 어레이로 쉽게 내보낼 수 있습니다. 다른 테이블을 사용해야합니까? 아마. 이것이 모두에게 말하는 것보다 낫습니까? 물론.
시크릿

6
이 질문에 대한 정답은 다음과 같습니다. RDBMS에 직렬화 된 값을 삽입하지 마십시오. 이것은 랩터소환 해야하는 종류입니다 .
NullUserException

1
@timdev : json-escaping은 일부 상황에서 SQL 이스케이프에 해당 할 수 있지만 그에 따라 결국에는 화상을 입을 수 있습니다. JSON은 백 슬래시를 사용합니다. 백 슬래시를 인식하지 않고 이스케이프 처리를 위해 큰 따옴표를 사용하는 DB에있는 경우 어떻게해야합니까? 예를 들어, ''대신 \'?
Marc B

1
여기에 표현 된 원칙에 동의하지만 (정상적인 형식은 훌륭하지만 DB를 사용하여 구조를 사용하는 것이 좋습니다), "아니요, 원하지 않습니다 ..."로 시작 하는 대답 은 내 머리에 종을 울립니다. 당신은 asker의 질문에 대한 완전한 맥락을 가지고 있지 않으며, 믿거 나 말거나, 이 특정 데이터를 비정규 화하고 단일 필드에 저장 해야 할 훌륭한 이유 가있을 수 있습니다 . 아니요, 전능하지 않습니다. 당신은 asker가 무엇을 원하는지 모릅니다. A의 의견을 넣어 코멘트 가 아닌 대답 하시기 바랍니다.
시스템 일시

35

가장 좋은 방법 중 하나 :

echo print_r($array, true);

10
문제를 해결하는 방법을 보여주는 답을 자세히 설명하십시오.
바나나에서 우리의 남자

1
"print_r ($ array, false);"를 사용할 수도 있습니다. 값을 반환하지 않고 배열을 인쇄하기 때문입니다. true가 주어지면 print_r () 자체에 인쇄되지 않고 단순히 문자열을 반환합니다. 자세한 내용은 php.net/manual/en/function.print-r.php
Garrett

json_decode혼동을 일으키는 형식으로 엉망 이되므로 이것이 가장 좋습니다 .
Aminah Nuraini 2016 년

14

implode () :

<?php
$string = implode('|',$types);

그러나 시크릿 모드가 맞습니다. 아마 그런 식으로 저장하고 싶지 않을 것입니다. 그것은 데이터베이스의 관계 적 힘을 완전히 낭비하는 것입니다.

직렬화가 잘못 된 경우 json_encode () 사용을 고려할 수도 있습니다.


내파은 평면 배열로 제한됩니다
ahnbizcad

11

이것은 키와 가치를 저장합니다

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

그것이 누군가를 돕기를 바랍니다.


6
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");

$string_array = json_encode($data);

이제이 $ string_array 값을 데이터베이스에 삽입 할 수 있습니다


5

상점 연관 배열의 경우 다음을 사용할 수 있습니다 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배열 이있는 creat 동적 파일 (예 : 구성 파일) 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);

3

PHP 문자열 함수를 사용할 수 있습니다 implode()

처럼,

<?php
  $sports=$_POST['sports'];;
  $festival=$_POST['festival'];
  $food=$_POST['food'];
  $array=[$sports,$festival,$food];
  $string=implode('|',$array);
  echo $string;
?>

예를 들어 $sports='football'; $festival='janmastami'; $food='biriyani';

그런 다음 출력은 다음과 같습니다.

football|janmastami|biriyani

PHP implode () 함수에 대한 자세한 내용은 w3schools를 참조하십시오


0

많은 방법이 있습니다.

이 두 가지 가장 좋은 방법은

$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

이미 주어진 답변을 반복하고 있습니다. 이것은 새로운 가치 나 새로운 방법을 추가하지 않습니다.
Tschallacka

@Tschallacka 그래,하지만이 게시물에 대한 답변은 거의 출력을 제공하지 않습니다 ....
Daud Malik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.