首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建自定义多维数组

创建自定义多维数组
EN

Stack Overflow用户
提问于 2014-01-09 19:40:41
回答 3查看 67关注 0票数 0

有一段时间我一直对此感到困惑,我想知道是否有一种方法可以将这些数据转换为自定义的多维数组。

我在我的表上运行了一个查询,它产生了这样一个数组

代码语言:javascript
复制
SELECT id_cms_category, name FROM cms_category_lang ORDER BY id_cms_category ASC

得到的数组如下所示。

代码语言:javascript
复制
array
0=>
  array
  'id_cms_category'=> 1
  'name'=>'Home'
1=>
  array
  'id_cms_category'=> 2
  'name'=>'Test'

因此,我在cms表上运行查询。

代码语言:javascript
复制
SELECT cl.id_cms, c.id_cms_category, cl.meta_title 
FROM cms_lang cl
LEFT JOIN cms c ON (c.id_cms = cl.id_cms) 
LEFT JOIN cms_link ci ON (ci.id_cms = cl.id_cms)
ORDER BY c.id_cms_category, cl.meta_title ASC

我得到了这样一个数组

代码语言:javascript
复制
array
0 => 
array
  'id_cms' => string '4' (length=1)
  'id_cms_category' => string '1' (length=1)
  'meta_title' => string 'About us' (length=8)
 1 => 
array
  'id_cms' => string '6' (length=1)
  'id_cms_category' => string '1' (length=1)
  'meta_title' => string 'Contact Us' (length=10)
 2 => 
array
  'id_cms' => string '1' (length=1)
  'id_cms_category' => string '1' (length=1)
  'meta_title' => string 'Delivery' (length=8)
 3 => 
array
  'id_cms' => string '2' (length=1)
  'id_cms_category' => string '1' (length=1)
  'meta_title' => string 'Legal Notice' (length=12)
 4 => 
array
  'id_cms' => string '5' (length=1)
  'id_cms_category' => string '1' (length=1)
  'meta_title' => string 'Secure payment' (length=14)
 5 => 
array
  'id_cms' => string '3' (length=1)
  'id_cms_category' => string '1' (length=1)
  'meta_title' => string 'Terms and conditions of use' (length=27)
 6 => 
array
  'id_cms' => string '10' (length=2)
  'id_cms_category' => string '2' (length=1)
  'meta_title' => string 'FAQ - UltraTech IBC Spill Pallet Plus' (length=37)
 7 => 
array
  'id_cms' => string '9' (length=1)
  'id_cms_category' => string '2' (length=1)
  'meta_title' => string 'FAQ - UltraTech P2 Plus 2-Drum Hard Top Spill Pallet' (length=52)
 8 => 
array
  'id_cms' => string '7' (length=1)
  'id_cms_category' => string '2' (length=1)
  'meta_title' => string 'XR-5, Urethane & Copolymer 2000' (length=31)

我想尝试获取所有这些数据,并以某种方式创建像这样的多维数组;

代码语言:javascript
复制
array
0 => 'Home'
        array
         id_cms => meta_title
1 => 'Test'
        array
         id_cms => meta_title

这样我就能运行这样的程序了

代码语言:javascript
复制
foreach($title as $key => $value)
{
    <li>$value</li>
    foreach($value as $id_cms => $page)
    {
        <li><a href="$id_cms">$page</a></li>
    }
}

若要使页面上的输出如下所示

代码语言:javascript
复制
Home
  home 1
  home 2
  home 3
Test
  test 1
  test 2
  test 3
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-09 19:59:47

我不会对此进行两次查询。

我将修改您的第二个查询,以便在相同的结果集中获得类别和页面名称。它应该看起来像:

代码语言:javascript
复制
SELECT cl.id_cms, c.id_cms_category, catlang.name, cl.meta_title 
FROM cms_lang cl
LEFT JOIN cms c 
     ON (c.id_cms = cl.id_cms) 
LEFT JOIN cms_link ci 
     ON (ci.id_cms = cl.id_cms)
LEFT JOIN cms_category_lang catlang 
     ON (catlang.id_cms_category = cl.id_cms_category)
ORDER BY c.id_cms_category, catlang.name, cl.meta_title ASC;

然后,您可以创建一个循环,只需在每次迭代中检查类别。如果它找到一个新块,结束前一个块并启动一个新块:

代码语言:javascript
复制
$currentCategory = '';
$output = '';
foreach ($rows as $row) {
    if ($currentCategory != $row['name']) {
        $output .= '</li><li>' . $row['name'];
    }
    $currentCategory = $row['name'];
    $output .= '<li><a href="' . $row['id_cms'] . '">' . $row['meta_title'] . '</li>';     
}

// Trim off our unnecessary </li>
$output = substr($output, 4);
票数 1
EN

Stack Overflow用户

发布于 2014-01-09 19:58:59

如果CMS返回一个数字索引数组(这是从您的帖子中听起来是这样的),您可以使用您想要的任何键重新索引该数组。

代码语言:javascript
复制
$array = array(0 => array('id_cms' => 4, 'id_cms_category' => 1, 'meta_title' => 'About us'));
$newArray = array();
foreach ( $array as $v ) {
    $newArray[$v['meta_title']] = $v;   
}
var_dump($newArray);

数组在PHP编程中是至关重要的,因此在进一步研究它们之前,您应该帮助自己了解它们。

票数 0
EN

Stack Overflow用户

发布于 2014-01-09 19:50:14

  1. 创建一个新的空数组:$newArray = array();
  2. 使用foreach检查结果,然后在执行过程中,检查新数组:if (isset($newArray[$row['id_cms_category']))中是否存在当前项的类别。
  3. 如果没有,创建它并使用一个新数组初始化它,该数组包含作为第一个元素的项:$newArray[$row['id_cms_category'] = array($row);
  4. 如果它已经存在(即您已经通过了属于这个类别的项),那么添加它:$newArray[$row['id_cms_category'] []= $row;

就这样!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21029605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档