2013-05-31 8 views
0

내 배열을 json_encode로하려고하는데 데이터 소스를위한 jQuery 플러그인 안에 배치 할 수 있도록 돌아왔다. 내 문제는 배열을 다시 가져 오기 위해 데이터베이스를 쿼리하기 위해 PDO를 사용하고 있지만 print_r을 수행하면 데이터베이스에서 돌아 오는 모든 이름이 자체 배열에 있음을 알 수 있습니다. 어떻게 모든 json_encode 할 때 jQuery 플러그인에 대한 하나의 문자열을 읽을 수 있도록 이러한 모든 결과를 단일 배열로 배치 할 것이라고?JSON 인코딩을위한 Unify 배열?

데이터베이스 쿼리 (PDO) - 일시 반환되는 배열의

$query = " 
      SELECT name 
FROM `clients` 
    ";  
    try 
    { 
     $stmt = $b3->prepare($query); 
     $stmt->execute(); 
    } 
    catch(PDOException $ex) 
    { 
     die("Failed to run query: " . $ex->getMessage()); 
    } 
    $players = $stmt->fetchAll(); 

예 (I 8000이 참고 그래서에만 게시 할 예정입니다 반환하기 처음 5 정도)

print_r($players); 

Array 
( 

[0] => Array 
     (
      [name] => ! CBC.ZXR 
    ) 

[1] => Array 
    (
     [name] => ! marioxz 
    ) 

[2] => Array 
    (
     [name] => ! V v :] 
    ) 

[3] => Array 
    (
     [name] => !?! 
    ) 

[4] => Array 
    (
     [name] => !CU @ 1337 
    ) 

다소 복잡해지기 때문에 배열을 어떻게 통합 할 수 있습니까?

json_encode($players["name"]); 

위에서 언급 한 이름의 단일 JSON 문자열을 반환합니다.

편집

현재 코드,

$query = " 
     SELECT name 
FROM `clients` 
";  
try 
{ 
    $stmt = $b3->prepare($query); 
    $stmt->execute(); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
} 
$playerNames = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); 

json_encode($playerNames); 
var_dump(json_last_error()); 
+0

'json_encode' _returns_ 값은 인수를 변형하지 않습니다. 이 값을 저장하고 ('$ playerNamesJson = json_encode ($ playerNames);') 그리고/또는 그것을 echo합니다. 바로 지금 당신은 그 결과를 버리고 있습니다. – raina77ow

+0

@ raina77ow이 작업을 수행했지만 정상적인 JSON 문자열이 아닙니다. http://gophobia.com/beta/ajaxSearch.php –

+1

하지만 분명히 그렇습니다. 표시된 페이지가 아닌 소스를 확인하십시오. [json validator] (http://jsonlint.com/)에서 내용을 확인하십시오. – raina77ow

답변

1

음,이 같은 이름의 배열을 만들 행의 결과 배열에 array_map를 사용할 수 있습니다

$player_names = array_map(function($p) { return $p['name']; }, $players); 
+0

json_encode ($ player_names)를 한 번 수행하면됩니다. 아무것도 반환하지 않습니다. –

+0

작동해야합니다. 'var_dump ($ player_names)'는 무엇을 보여줍니까? – Barmar

+0

PHP 5.2를 사용하지 않는 한이 [데모] (http://ideone.com/clone/RDaBHe)를 확인하십시오. 익명 함수가 사용되면 오류가 표시됩니다. – raina77ow

-1
$players = array 
(
    'name' => iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($players)), false), 
); 

Demo. PHP 5.5


은 또한 array_column() 있습니다.

+0

왜 downvote? –

2

당신은 당신의 데이터베이스 쿼리 결과의 첫 번째 열에 단일 레벨 배열을 얻으려고 노력하는 경우, 당신의 fetchAll 통화에 가져 오기 유형을 전달 고려 :

$playerNames = $sth->fetchAll(PDO::FETCH_COLUMN, 0); 

이 $ playerNames 발생한다 찾고있는 형식의 배열로, json_encode 또는 원하는 다른 것을 전달할 수 있습니다. 가져 오기 옵션에 대한 자세한 내용은 php docs (http://php.net/manual/en/pdostatement.fetchall.php)에서 예제를 볼 수 있습니다.

+1

+1, 아마도 가장 쉬운 방법입니다. – raina77ow

+0

json_encode 할 때 아무것도 반환하지 않습니다. http://gophobia.com/beta/ajaxSearch.php에서 내가 돌아 오는 것을 보여줍니다. 다소 큰 배열입니다. 같은 이유에서 –

+0

+1입니다. –