简体   繁体   English

从SQL查询将键值对推入数组

[英]Pushing key value pairs into an array from an SQL query

I'm pulling data from a database, and would like to insert it into an array. 我正在从数据库中提取数据,并希望将其插入到数组中。 I would like the array to look like 我希望数组看起来像

$myArray = array(
           $id => array(
                        "title" => $title,
                        "description" => $description,
                        "tag" => $tag,
                        "link" => $link
                        )
                 )

Where $id is the ID pulled from the database, $title is pulled from the "title" column of the database, and so on. 其中$ id是从数据库中提取的ID,$ title是从数据库的“ title”列中提取的,依此类推。

I need all of this data to be connected so that I can use a template to display the information easily. 我需要连接所有这些数据,以便可以使用模板轻松显示信息。

Currently this is my code: 目前,这是我的代码:

<?php
$query = mysqli_query($db_conn, $advice);
//Arrays for the key value pairs
$pregnancyArray = array();
$postpartumArray = array();
$babyArray = array();
$toddlerArray = array();
$parentingArray = array();

//Arrays for now
$pregnancyTitleArray = array();
$pregnancyLinkArray = array();
$pregnancyDescriptionArray=array();
$pregnancyTagArray=array();

$postpartumTitleArray = array();
$postpartumLinkArray = array();
$babyTitleArray = array();
$babyLinkArray = array();
$toddlerTitleArray = array();
$toddlerLinkArray = array();
$parentingTitleArray = array();
$parentingLinkArray = array();

function createSlug($slug)
{
    $LNSH = '/[^\-\s\pN\pL]+/u';
    $SDH = '/[\-\s]+/';
    $slug = preg_replace($LNSH, '', mb_strtolower($slug, 'UTF-8'));
    $slug = preg_replace($SDH, '-', $slug);
    $slug = trim($slug, '-');
    return $slug;
}

while ($row = mysqli_fetch_array($query)) {
    $id = $row['adviceID'];
    $title = $row['title'];
    $cat = $row['cat'];
    $link = createSlug($title);
    $description = $row['description'];
    $tag = $row['tag'];


    if ($cat === 'pregnancy') {

        array_push($pregnancyTitleArray, $title);
        array_push($pregnancyLinkArray,$link);
        array_push($pregnancyDescriptionArray, $description);
        if($tag){
            array_push($pregnancyTagArray, $tag);
        }
        else {
            array_push($pregnancyTagArray, "nt");
        }

    } elseif ($cat === 'postpartum') {
        array_push($postpartumTitleArray, $title);
        array_push($postpartumLinkArray,$link);
    } elseif ($cat === 'baby') {
        array_push($babyTitleArray, $title);
        array_push($babyLinkArray,$link);
    } elseif ($cat === 'toddler') {
        array_push($toddlerTitleArray, $title);
        array_push($toddlerLinkArray,$link);
    } elseif ($cat === 'parenting') {
        array_push($parentingTitleArray, $title);
        array_push($parentingLinkArray,$link);
    } else {
        continue;
    }
}
    ?>
<section class="content" id="pregnancy-advice">
    <h2 class="heading">Pregnancy Advice</h2>
    <ul class="justified-content" style="list-style-type: none;">
    <?php
        for($i = 0; $i < sizeof($pregnancyTitleArray) && $i <= 15; $i++){
          echo "<li class=\"extra-spacing\"><a href=\"atemplate.php?\"" . $pregnancyLinkArray[$i] .  ">" . $pregnancyTitleArray[$i] . "</a></li>";
        }
     ?>
        <a class="more-links" href="adviceCat.php?cat=pregnancy">More -></a>
    </ul>
</section>

Can you just build an array with your result set like so: 您可以像这样用结果集构建一个数组吗?

$results = [];
while ($row = mysqli_fetch_array($query)) {
  $results[$row['adviceID']] = $row;
  $results[$row['adviceID']]['link'] = createSlug($title);
}

If you'd only like to have certain data in your array you can build it differently: 如果您只想在数组中包含某些数据,则可以采用其他方式构建它:

$results = [];
while ($row = mysqli_fetch_array($query)) {
  $results[$row['adviceID']] = array(
    'title' => $row['title'], 
    'description' => $row['description'],
    'tag' => $row['tag'],
    'link' => createSlug($title),
  );
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM