2016-02-17 65 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