테스트 사이트 - 개발 중인 베타 버전입니다

배열 값 얻어오기 채택완료

평상심NZ 3년 전 조회 3,438

안녕하세요.

배열 관련해서 여쭙습니다.

MS Endpoint에서 다운받은 csv 화일을 배열에 넣었습니다.

</p>

<pre>
echo "<pre>"; print_r($dataTbl);echo "</pre>";
</pre>

<p>

결과가 

</p>

<pre>
Array
(
    [0] => Array
        (
            [Device ID] => cxxxxxxxxe6a85
            [Device name] => DESKTOP-xxxxxxx</pre>

<p>

그런데 첫번째 레코드의 [Device ID] 값을 불러 오면 가져오지 못합니다.

</p>

<p>echo "========>".$dataTbl[0]['Device ID'];</p>

<p>

요리조리 검사해봐도 알 수 없어 여쭙습니다.

삽질이 힘드네요. 

 

감사합니다.

 

-----

추가:

1. "Device ID"처럼 두 단어로 되어 있지 않은 것은 잘 나옵니다.

2. csv 문서의 형식이 UTF-8 with BOM 인데 이것이 문제가 될까요?

 

 

 

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
s
sinbi Expert
3년 전

저번 배르만 님 답변 코드 중에서 아래 코드를 수정해 보세요.

https://sir.kr/qa/473224

수정 전: $dataTbl = json_decode($dataTbl); 수정 후: $dataTbl = json_decode($dataTbl, true);

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

평상심NZ
3년 전
감사합니다.
이미 해보았습니다. " 의 문제가 아니고 UTF-8 BOM 문서의 문제로 보입니다.
VSCODE에서 보니 UTF-8 with BOM 형식으로 되어 있네요.

다운받은 화일의 형식을 바꿔줘야하는데...
PHP에서 가능한지 찾아보고 있습니다.
MS는 왜 이런 형식을 사용하는지....

감사합니다.
평상심NZ
3년 전
[code]
$file_handler = fopen($filename, "r");
$contents = fread($file_handler, filesize($filename));
fclose($file_handler);
for ($i = 0; $i < 3; $i++){
$bytes[$i] = ord(substr($contents, $i, 1));
}
if ($bytes[0] == 0xef && $bytes[1] == 0xbb && $bytes[2] == 0xbf) {
$file_handler = fopen($filename, "w");
fwrite($file_handler, substr($contents, 3));
fclose($file_handler);
printf("%s BOM removed.<br/>n", $filename);
}
[/code]

인터넷에 어떤 고수분이 남겨두었더군요.
https://www.memorylack.com/solving-bom-of-utf-8-file-encoding-problem-with-php-session-and-header/

이것을 해결하니 또 다른 문제가 생기네요. ㅠㅠ

감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

플래토
3년 전

이렇게 해보는게 어떨까요?

</p>

<p> </p>

<p>// 0번만 일단 확인하는것으로 체크합니다.</p>

<p>$row = $dataTbl[0];</p>

<p>foreach($row as $key => $value) {</p>

<p>   echo $key ." : ".$value."
";</p>

<p>}</p>

<p>


 
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

평상심NZ
3년 전
파일을 배열로 바꿀때 fgetcsv을 이용해서 처리했습니다.
감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인