2016-02-17 64 views
0

我需要一個具有此結構的關聯數組(鍵是字符串,值是索引數組),並且我正在動態地附加元素。PHP作爲索引數組插入關聯數組

Array(
["itemCategory"]=> Array("itemName", "itemName"...) 
["itemCategory"]=> Array("itemName", "itemName"...) 
... 
) 

但是,我似乎不能當我這樣做,形成一個關聯數組中的數組(的要求,我已經添加了庫MySQLi代碼):

if (!($stmt = $mysqli->prepare(
"SELECT b.id, b.type, b.name, b.street, b.city, b.state, b.zipcode, b.phone, b.website, b.hours, b.latitude, b.longitude, c.id, c.name, i.id, i.name 
FROM business b LEFT JOIN business_category_item bci ON bci.bid = b.id 
LEFT JOIN category c ON c.id=bci.cid LEFT JOIN item i ON i.id = bci.iid"))) { 
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; 
} 

if (!$stmt->execute()) { 
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; 
} 

if(!$stmt->bind_result($bID,$bT,$bN,$bStr,$bC,$bSta,$bZ,$bP,$bW,$bH,$bLat,$bLng,$cI,$cN,$iI,$iN)){ 
    echo "Bind failed: " . $mysqli->connect_errno . " " . $mysqlii->connect_error; 
} 

$arr=array(); 
while($row=$stmt->fetch()){ 
    $arr[$cN][]=$iN; //gettype($cN) returns "string" 
} 

我自己也嘗試array_push( )沒有運氣(未定義指數誤差):

array_push($arr[$cN],$iN); 

當我打印我的陣列,它總是打印這樣的:

print_r($arr, true); 

Array 
(
    [0] => Array 
     (
      [0] => "MP3 player" 
      [1] => "Computers" 
     ) 

    [1] => Array 
     (
      [0] => "Tank tops" 
      [1] => "Blankets" 
      [2] => "Shirts" 
     ) 
) 

,而不是我所需要的,那就是:

Array 
(
    ["electronics"] => Array 
     (
      [0] => "MP3 player" 
      [1] => "Computers" 
     ) 

    ["clothing"] => Array 
     (
      [0] => "Tank tops" 
      [1] => "Blankets" 
      [2] => "Shirts" 
     ) 
) 

任何幫助,將不勝感激。

+2

你寫的東西看起來應該有效。你確定'$ cName'設置正確嗎? – Barmar

+0

你正在使用'mysqli'?顯示' - > bind_result()'部分,其中最有可能設置'$ cName' – Ghost

+0

請發佈實際代碼,特別是設置'$ cName'的部分。 – Barmar

回答

0

我相信我解決了這個問題。當我使用 var_dump($arr);時,它正確地打印爲關聯數組。當我使用 print_r($arr);時,它將打印爲索引數組。我不確定這是爲什麼。

編輯:其實,問題是我打印它之前使用排序($ ARR)排序數組。

+0

我從來沒有見過這樣的事情。 – Barmar

+0

你看過我在ideone.com上的演示了嗎?它使用'print_r'並將其正確打印爲關聯數組。 – Barmar

+0

這會發生,如果你做了像'print_r(array_values($ arr))'。但我不相信只是從'print_r()'切換到'var_dump()',而不改變其他任何東西,都可以解決它。 – Barmar

0

爲什麼不把它簡單,使用這樣的事情,而不是:

$result = $mysqli->query("SELECT..."); 
if ($result->num_rows) { 
    while($row = $result->fetch_assoc()){ 
     $arr[$row['id']][] = $row['name']; 
    } 
} 

你會迷失很容易在這些衆多的變量與您在bind_result()作出不可破譯的名字。

+0

我欣賞風格提示。但是,我解決了我的問題。見下文。 – Vinnie

+0

不用擔心。只是爲了長期爲您節省一些潛在的頭痛。 –

+0

他使用'mysqli',而不是'PDO'。 – Barmar