배열 값 얻어오기 채택완료

안녕하세요.

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

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

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

결과가 

Copy
Array
(
    [0] => Array
        (
            [Device ID] => cxxxxxxxxe6a85
            [Device name] => DESKTOP-xxxxxxx

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

Copy
echo "========>".$dataTbl[0]['Device ID'];

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

삽질이 힘드네요. 

 

감사합니다.

 

-----

추가:

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

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

 

 

 

 

 

답변 2개

채택된 답변
+20 포인트

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

https://sir.kr/qa/473224

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

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

답변에 대한 댓글 2개

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

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

감사합니다.
[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/

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

감사합니다.

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

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

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

$row = $dataTbl[0];

foreach($row as $key => $value) {

   echo $key ." : ".$value."<BR>";

}

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

답변에 대한 댓글 1개

파일을 배열로 바꿀때 fgetcsv을 이용해서 처리했습니다.
감사합니다.

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

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

로그인
🐛 버그신고