2012-01-12 160 views
1

我的查詢輸出這在phpMyAdmin:PHP多維數組

enter image description here

代碼:

<?php 
if ($stmt = $mysqli->prepare("SELECT service_names.id, service_names.name as service, 
service_titles.name as title, service_titles.id as service_title_id FROM `service_names` INNER 
JOIN service_titles ON title_id = service_titles.id WHERE service_titles.user_id = ? AND 
service_titles.slide_id = ?")) { 

$stmt->bind_param('ii', $user_id, $slide_id); 
$stmt->execute(); 
$stmt->bind_result($service_id, $service_name, $service_title, $service_title_id); 
$stmt->store_result(); 

$result_array = array(); 

while ($stmt->fetch()) { 
    if (!isset($result_array[$service_title])){ 
     $result_array[$service_title] = array(); 
    } 
    $result_array[$service_title][] = array('service_name'=>$service_name,'service_id'=>$service_id); 
} 

$html = ""; 
foreach($result_array as $key => $value){ 
    $html .= " 
    <div class=\"list\"> 
     <h3 class=\"secondary\"><span id={ GOES HERE }>$key</span></h3> 
      <ul>"; 
     foreach($result_array[$key] as $service){ 
      $html .= "<li><span id=\"".$service['service_id']."\">".$service['service_name']."</span></li>\n"; 
     } 
    $html .= "</ul></div>"; 
} 

echo $html; 
$stmt->close(); 
} 

?> 

這段代碼是生產是:

enter image description here

我需要的是抓住service_title_id,並將其放置在代碼:

<h3 class=\"secondary\"><span id={ GOES HERE }>$key</span></h3> 

我使用了一個jQuery聯編輯腳本,它需要分配給它一個唯一的ID。我有一個變量值$ service_title_id這只是一個將它集成到數組中的問題,我對所有不同的數組和值都有些困惑。

如果有人可以幫助,我會非常感激。

+0

您不能使用'service_title_id'作爲id,因爲它不是唯一的。你究竟在做什麼?你想實現什麼? – DaveRandom 2012-01-12 21:08:50

+0

它會很好,因爲在我的內聯編輯器中,如果我編輯它,所以我將「維護」更改爲「新值」,它將在數據庫中將該ID(1)更新爲「新值」,並且它將更新所有他們(因爲它應該) – Drew 2012-01-12 21:09:58

+0

你仍然不能使用這個作爲HTML id - 如果你這樣做,它不會做任何有用的。 HTML ID必須是唯一的。如果您需要頁面上的數據,則必須將其放在另一個元素中,例如「」或「」,具體取決於您在客戶端實際需要處理的數據。 – DaveRandom 2012-01-12 21:20:50

回答

2

第一種方式,需要在腳本中最小的變化,就是增加service_title_id

while ($stmt->fetch()) { 
    if (!isset($result_array[$service_title])){ 
     $result_array[$service_title] = array(); 
    } 
    $result_array[$service_title][] = array(
     'service_name'=>$service_name, 
     'service_id'=>$service_id, 
     'service_title_id'=>$service_title_id 
    ); 
} 

<h3 class=\"secondary\"><span id={$result_array[$key][0]['service_title_id']}>$key</span></h3> 

其他和更清潔的方式將是改變陣列的結構保存所有的服務,像這樣:服務和數組的第一個元素得到它

while ($stmt->fetch()) { 
    if (!isset($result_array[$service_title])){ 
     $result_array[$service_title_id] = array(
      'service_title' => $service_title 
      'services' => array(), 
     ); 
    } 
    $result_array[$service_title_id]['services'][] = array(
     'service_name'=>$service_name, 
     'service_id'=>$service_id 
    ); 
} 


$html = ""; 
foreach($result_array as $service_title_id => $service_details){ 
    $html .= " 
    <div class=\"list\"> 
     <h3 class=\"secondary\"><span id=\"{$service_title_id}\">{$service_details['title']}</span></h3> 
      <ul>"; 
     foreach($service_details['services'] as $service){ 
      $html .= "<li><span id=\"{$service['service_id']}\">{$service['service_name']}</span></li>\n"; 
     } 
    $html .= "</ul></div>"; 
} 
+0

完美,非常感謝! – Drew 2012-01-12 21:41:12

1

我認爲有關具有唯一的html id的評論者正在做些什麼,但是這裏有一些改進的PHP。我改名爲你的變量,以使事情更清晰

$html = ""; 
foreach($result_array as $service_title => $services){ 
    $html .= " 
    <div class=\"list\"> 
     <h3 class=\"secondary\"><span id={$services[0]['service_id']}>$service_title</span></h3> 
      <ul>"; 
     foreach($services as $service){ 
      $html .= "<li><span id=\"".$service['service_id']."\">".$service['service_name']."</span></li>\n"; 
     } 
    $html .= "</ul></div>"; 
} 
1

快速和骯髒的,但會完成這項工作:

<?php 
if ($stmt = $mysqli->prepare("SELECT service_names.id, service_names.name as service, 
service_titles.name as title, service_titles.id as service_title_id FROM `service_names` INNER 
JOIN service_titles ON title_id = service_titles.id WHERE service_titles.user_id = ? AND 
service_titles.slide_id = ?")) { 

$stmt->bind_param('ii', $user_id, $slide_id); 
$stmt->execute(); 
$stmt->bind_result($service_id, $service_name, $service_title, $service_title_id); 
$stmt->store_result(); 

$result_array = array(); 

while ($stmt->fetch()) { 
    if (!isset($result_array[$service_title])){ 
     $result_array[$service_title] = array(); 
    } 
    $result_array[$service_title . ':' . $service_id][] = $service_name; 
} 

$html = ""; 
foreach($result_array as $key => $value){ 
     list ($title, $id) = explode(':', $key); 
    $html .= " 
    <div class=\"list\"> 
     <h3 class=\"secondary\"><span id=\"$id\">$title</span></h3> 
      <ul>"; 
     foreach($value as $service){ 
      $html .= "<li><span>$service</span></li>\n"; 
     } 
    $html .= "</ul></div>"; 
} 

echo $html; 
1

改變循環到這一點:

foreach($result_array as $key => $value){ 
    $html .= " 
    <div class=\"list\"> 
     <h3 class=\"secondary\"><span id=\"service_title_id_{$value[0]['service_title_id']}\">$key</span></h3> 
      <ul>"; 
     foreach($value as $service){ 
      $html .= "<li><span id=\"".$service['service_id']."\">".$service['service_name']."</span></li>\n"; 
     } 
    $html .= "</ul></div>"; 
} 
1

改變這一行到:

$result_array[$service_title][] = array('service_name'=>$service_name,'service_id'=>$service_id, 'service_title_id' => $service_title_id); 

這行:

<h3 class=\"secondary\"><span id=\"".$."\">$result_array[$key]['service_title_id']</span></h3> 

這是一個有點多餘,但基本上你把service_title_id放在第二維數組並從那裏使用它。