Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Foreach覆盖多维数组中以前的记录_Php_Arrays_Multidimensional Array_Foreach_Array Push - Fatal编程技术网

Php Foreach覆盖多维数组中以前的记录

Php Foreach覆盖多维数组中以前的记录,php,arrays,multidimensional-array,foreach,array-push,Php,Arrays,Multidimensional Array,Foreach,Array Push,我有一个多维数组,我想以表格的形式显示这个数组,比如 +------+-----+--------+-------+-------+ |名称|红|黄|绿|白| +------+-----+--------+-------+-------+ |abc | 8 | 2 | 4 | 0| |xyz | 2 | 8 | 0 | 0| +------+-----+--------+-------+-------+ 下面是我所看到的数组 [0] => array( 'label'=&

我有一个多维数组,我想以表格的形式显示这个数组,比如

+------+-----+--------+-------+-------+
|名称|红|黄|绿|白|
+------+-----+--------+-------+-------+
|abc | 8 | 2 | 4 | 0|
|xyz | 2 | 8 | 0 | 0|
+------+-----+--------+-------+-------+
下面是我所看到的数组

[0] => array(
        'label'=> 'red',
        [value] => Array
        (
                [0] => array
                (
                        [count] => 47
                        [firstname] => Syst

                )
                [1] => array
                (
                        [count] => 2
                        [firstname] => xyz
                )

                [2] => array
                (
                        [count] => 8
                        [firstname] => abc
                )
)
[1] => array(
        'label'=> 'yellow',
        [value] => Array
        (
                [0] => array
                (
                        [count] => 4
                        [firstname] => dim
                )
                [1] => array
                (
                        [count] => 2
                        [firstname] => abc
                )
                [2] => array
                (
                        [count] => 8
                        [firstname] => xyz
                )
        )
等等 我已经厌倦了下面的代码,但我不知道代码有什么问题

foreach($rows as $row)
{
    echo '<th>'.$row->label.'</th></tr>';
    $i = 1;
    $final = [];
    foreach($row->value as $v){
        $temp = [];
        $temp[$v->firstname.' '.$v->lastname] = [];
        $output = findKey($final, $v->firstname.' '.$v->lastname);
        if($output){
            $temp[$v->firstname.' '.$v->lastname]['count'] = $v->count ;
            $temp[$v->firstname.' '.$v->lastname][$row->label.'_'.$row->color] =  $v->count ;
        }
        array_push($final,$temp);
    }
}
print_r($rows); //die;
foreach($rows作为$row)
{
回显“”。$row->标签。“;
$i=1;
$final=[];
foreach($row->值为$v){
$temp=[];
$temp[$v->firstname.'.$v->lastname]=[];
$output=findKey($final,$v->firstname.'.$v->lastname);
如果(产出){
$temp[$v->firstname.'.$v->lastname]['count']=$v->count;
$temp[$v->firstname.'.$v->lastname][$row->label.''.'.''.$row->color]=$v->count;
}
阵列推送($final,$temp);
}
}
打印(行)//死亡

只需在第一个循环外部初始化
$final
数组。如下图所示

    $final = [];

    foreach($rows as $row)
    {
        echo '<th>'.$row->label.'</th></tr>';
        $i = 1;    
        foreach($row->value as $v){
            $temp = [];
            $temp[$v->firstname.' '.$v->lastname] = [];
            $output = findKey($final, $v->firstname.' '.$v->lastname);
            if($output){
                $temp[$v->firstname.' '.$v->lastname]['count'] = $v->count ;
                $temp[$v->firstname.' '.$v->lastname][$row->label.'_'.$row->color] =  $v->count ;
            }
            array_push($final,$temp);
        }
    }
    print_r($rows); //die;
$final=[];
foreach($行作为$行)
{
回显“”。$row->标签。“;
$i=1;
foreach($row->值为$v){
$temp=[];
$temp[$v->firstname.'.$v->lastname]=[];
$output=findKey($final,$v->firstname.'.$v->lastname);
如果(产出){
$temp[$v->firstname.'.$v->lastname]['count']=$v->count;
$temp[$v->firstname.'.$v->lastname][$row->label.''.'.''.$row->color]=$v->count;
}
阵列推送($final,$temp);
}
}
打印(行)//死亡

您提供的
打印\r
输出不一致——已对其进行操作以添加标签键。print\r将它们输出为
[label]
,而不是
“label”
,而且,
print\r
也不会在同一行的末尾输出逗号

因此,由于您没有提供正确的阵列,因此该解决方案可能无法工作,我在此提供了一个基于以下阵列的解决方案:

$finalArr = 
array(
    array(
        'label' => 'red',
        'value' => Array (
                array ("count" => 47, "firstname" => 'Syst'),
                array ("count" => 2, "firstname" => 'xyz'),
                array ("count" => 8, "firstname" => 'abc')
        )
    ),
    array(
        'label' => 'yellow',
        "value" => Array (
                array ("count" => 4, "firstname" => 'dim'),
                array ("count" => 2, "firstname" => 'abc'),
                array ("count" => 8, "firstname" => 'xyz')
        )
    )
);
那么解决方案可能是:

// collect unique list of "firstname" values
$rowHeaders = array();
foreach($finalArr as $column) {
    $rowHeaders = array_merge($rowHeaders, array_column($column["value"], "firstname"));
}
$rowHeaders = array_unique($rowHeaders);
usort($rowHeaders, 'strcasecmp');

// get column headers
$colHeaders = array_column($finalArr, "label");

// create matrix: first column
$matrix = array(array_merge(array("Name"), $colHeaders));
foreach($rowHeaders as $firstname) {
    $matrix[] = array($firstname);
}
// ... and colour columns:
foreach($finalArr as $colIndex => $column) {
    $names = array_column($column["value"], "firstname");
    foreach ($rowHeaders as $rowIndex => $name) {
        $matrix[$rowIndex+1][] = in_array($name, $names) ? $column["value"][array_search($name, $names)]["count"] : 0;
    }
}

// convert matrix into HTML table
$html = "";
$td = "th";
foreach ($matrix as $row) {
    $html .= "<tr><$td>" . implode("</$td><$td>", $row) . "</$td></tr>\n"; 
    $td = "td";
}
$html = "<table border=1>\n$html</table>";

// output html:
echo $html;
//收集“firstname”值的唯一列表
$rowHeaders=array();
foreach($finalArr作为$column){
$rowHeaders=array\u merge($rowHeaders,array\u column($column[“value”],“firstname”);
}
$rowHeaders=数组_唯一($rowHeaders);
usort($rowHeaders,'strcasecmp');
//获取列标题
$colHeaders=array_列($finalArr,“label”);
//创建矩阵:第一列
$matrix=array(array_merge(array(“Name”),$colHeaders));
foreach($rowHeaders作为$firstname){
$matrix[]=数组($firstname);
}
// ... 和彩色栏:
foreach($colIndex=>$column的最终值){
$names=array_column($column[“value”],“firstname”);
foreach($rowHeaders作为$rowIndex=>$name){
$matrix[$rowIndex+1][]=在数组中($name,$names)$column[“value”][数组搜索($name,$names)][“count”]:0;
}
}
//将矩阵转换为HTML表
$html=“”;
$td=“th”;
foreach($矩阵作为$行){
$html.=''。内爆(“,$row)。“\n”;
$td=“td”;
}
$html=“\n$html”;
//输出html:
echo$html;
输出为:

<table border=1>
<tr><th>Name</th><th>red</th><th>yellow</th></tr>
<tr><td>abc</td><td>8</td><td>2</td></tr>
<tr><td>dim</td><td>0</td><td>4</td></tr>
<tr><td>Syst</td><td>47</td><td>0</td></tr>
<tr><td>xyz</td><td>2</td><td>8</td></tr>
</table>

名为红黄色
abc82
dim04
系统470
xyz28
在浏览器中呈现为:


此行错误
echo'.$row->label'~它将为循环中的每个迭代添加一个结束标记,并将使任何格式偏离对齐。您提供的
print\r
输出是手动操作的,不可能来自
print\r
。请确保按现有方式提供数组,否则解决方案将不是您所需要的。您使用
->
表示法,但您的数据不显示任何对象,只显示数组。您能提供您得到的错误消息吗?我已经将对象转换为数组$arr=array();$arr=objToArray($rows,$arr);$finalArr=array();foreach($arr as$newArr){$i=1;foreach($newArr['value']as$valueArr){$temp=array();$name=$valueArr['firstname'..'.$valueArr['lastname'];$temp[$name]['count.$i]=$valueArr['count'];echo$name;print\r($finalArr);if(多关键字存在($finalArr,$name)){$temp[$name]['count]['count.$i]=$valueArr]['count'];}$i++;数组推送($finalArr,$temp);}但它对我仍然不起作用什么不起作用,你收到了什么错误消息,什么输出错误?你能更具体一点吗?请在问题中添加此信息,因为在注释中它几乎不可读。所以现在仍然$final数组正在覆盖以前的值?感谢解决方案:)但我需要红色、黄色作为列名和firstname的名称为红黄绿白abc 8 2 4 0 dim 2 8 0 0 0 sys 1 0 8 45 xyz 7 2 0 5 OK,对答案进行了调整,使行/列切换到我之前介绍的内容。