将数组添加到多维数组中的特定键

时间:2018-09-14 08:30:01

标签: php arrays

我是PHP新手,遇到了一些问题。

我有这样的多维数组显示。

array (size=4)
  'debt Reduction' => 
     array (size=2)
      'credit card ' => string '495.00' (length=6)
      'Student Loan' => string '40.00' (length=5)
  'gifts' => 
     array (size=2)
      'Birthday' => string '23.00' (length=5)
      'Christmas' => string '49.00' (length=5)
  'personal' => 
     array (size=2)
      'Gym Memberships' => string '138.00' (length=6)
      'Hair Cuts' => string '40.00' (length=5)
  'saving' => 
     array (size=2)
      'Emergency Fund' => string '80.00' (length=5)
      'wedding' => string '60.00' (length=5)

使用此产品制成

$sortedArray = array();
foreach ($SQLresults as $row)
{
    $sortedArray[$row['catagoryName']][$row['Subcatagory_name']] = $row['expenseAmount'];
}

此数组随后进入函数以产生一系列HTML结果

我还有另一个数组,显示每个部分的总量,输出为

array (size=4)
  0 => 
     array (size=1)
       'expenseAmount' => string '535.00' (length=6)
  1 => 
     array (size=1)
       'expenseAmount' => string '72.00' (length=5)
  2 => 
     array (size=1)
       'expenseAmount' => string '178.00' (length=6)
  3 => 
     array (size=1)
       'expenseAmount' => string '140.00' (length=6)

我以为我可以取出expenseAmount文本并将其输入到我创建的函数中

foreach ($expenseAmount as $rowe => $new)
{
    $type[] = $new['expenseAmount'];
}

这会删除消耗金额文本

下面是我用来输出html的函数($array代表新数组)

public function dropdownTally($groupedCatagories, $number_of_rows, $array)
{    
    $output = '';
    if($number_of_rows > 0)
    {
        foreach ($groupedCatagories as $category => $subCategories)
        {
            $output .= '<input type="button"id="showdiv"class="btn btn-link dropdownCats"value="'.$category.''.$array.'">';

            $output .= '<div id="div" class ="newClassTest" style="display:none">';
            $output .= '<table class="dynamicExpenseTable">';
            $output .= '<tr class="tableRows">';

            foreach ($subCategories as $title => $amount)
            {
                $output .='<td class="dataExpense">'.$title.'</td>';
                $output .='<td class="dataExpense">'. $amount.'</td>'; 
                $output .='</tr>';
            }
            $output .='</table>  ';
            $output .='</div>';
        }
    }
    else
    {
        $output .= '<p>No data found</p>';
    }
    return $output;
}

如您所见,我正在尝试将每个类别的总和添加到名称旁边。

输出是两件事之一:

-“从数组到字符串的转换”。

经过一番游戏后,我想将其包装在另一个foreach语句中,然后重复该按钮并一遍又一遍地输出。

所以我的问题是,我是否应该尝试将第二个数组推入第一个数组,这将如何执行以输出类似的内容?

array (size=4)
  'debt Reduction' => 
       '535.00'
     array (size=2)
      'credit card ' => string '495.00' (length=6)
      'Student Loan' => string '40.00' (length=5)
  'gifts' => 
       '72.00'
      array (size=2)
      'Birthday' => string '23.00' (length=5)
      'Christmas' => string '49.00' (length=5)

还是有一种更简单的方法来实现我的意思?对不起,我只是想尝试解决我的问题而发表的冗长帖子。

再次感谢 杰克

1 个答案:

答案 0 :(得分:0)

生成$output变量时有很多小错误。

在属性值和下一个属性名称之间添加一些空格。您编写了type="button"id="showdiv"class="btn btn-link dropdownCats"value="...",这可能会导致有关读取代码的错误。

$output .= '<input type="button" id="showdiv" class="btn btn-link dropdownCats" value="'.$category.''.$array.'">';

然后,id="showdiv"在循环中是错误的。 ID必须是唯一的。您可能要使用类或为该div指定一个值。

$i = 0;
foreach ($groupedCatagories as $category => $subCategories)
{
    $i++;
    $output .= '<input type="button" id="showdiv_' . $i . '" ...>';
    //left of code
}

接下来,正如您在评论中所述,按钮的值应为"debt Reduction : 535.00",并且您写了value="' . $category . $array. '"

我想这些值来自您显示的第一个数组

'debt Reduction' => 
    array (size=2)
        'credit card ' => string '495.00' (length=6)
        'Student Loan' => string '40.00' (length=5)

535是'credit card 'Student Loan的加法。

在尝试显示该值之前,可能需要计算该值。

$i = 0;
foreach ($groupedCatagories as $category => $subCategories)
{
    $i++;
    $buttonValue = 0;
    foreach ($subCategories as $value)
        $buttonValue += floatval($value);
    $buttonValue = $category . ' : ' . $buttonValue;

    $output .= '<input type="button" id="showdiv_' . $i . '" class="btn btn-link dropdownCats" value="' . $buttonValue . '">';
    //...
}

与之前一样,您在循环$output .= '<div id="div_' . $i . '" class ="newClassTest" style="display:none">';中定义了一个硬编码ID。

最后,生成的HTML无效。您可以在循环外部打开<tr>标签,然后在该循​​环内部将其关闭。这将产生这种HTML:

<table>
    <tr>
        <td>
        </td>
        <td>
        </td>
    </tr>     <!-- notice the closed <tr> not being re-opened -->
        <td>
        </td>
        <td>
        </td>
    </tr>
        <td>
        </td>
        <td>
        </td>
    </tr>
</table>

您可能想在循环中打开和关闭它。

foreach ($subCategories as $title => $amount)
{
    $output .= '<tr class="tableRows">';
    $output .= '<td class="dataExpense">' . $title . '</td>';
    $output .= '<td class="dataExpense">' .  $amount . '</td>'; 
    $output .= '</tr>';
}

最终代码可能是这样的:

$i = 0;
foreach ($groupedCatagories as $category => $subCategories)
{
    $i++;
    $buttonValue = 0;
    foreach ($subCategories as $value)
        $buttonValue += floatval($value);
    $buttonValue = $category . ' : ' . $buttonValue;

    $output .= '<input type="button" id="showdiv_' . $i . '" class="btn btn-link dropdownCats" value="' . $buttonValue . '">';


    $output .= '<div id="div_' . $i . '" class ="newClassTest" style="display:none">';
    $output .= '<table class="dynamicExpenseTable">';

    foreach ($subCategories as $title => $amount)
    {
        $output .= '<tr class="tableRows">';
        $output .= '<td class="dataExpense">' . $title . '</td>';
        $output .= '<td class="dataExpense">' .  $amount . '</td>'; 
        $output .= '</tr>';
    }
    $output .= '</table>  ';
    $output .= '</div>';
}