PHP在循环中添加缺少的键

PHP在循环中添加缺少的键,php,arrays,Php,Arrays,我有以下数组 [rows] => Array ( [0] => Array ( [id] => 2704783858001796 [rowNumber] => 1 [expanded] => 1

我有以下数组

    [rows] => Array
            (
                [0] => Array
                    (
                        [id] => 2704783858001796
                        [rowNumber] => 1
                        [expanded] => 1
                        [createdAt] => 2020-02-18T18:42:54Z
                        [modifiedAt] => 2020-02-18T22:07:36Z
                        [cells] => Array
                            (
                                    [0] => Array
                                        (
                                            [columnId] => 1676391784703876
                                            [value] => Approved
                                            [displayValue] => Approved
                                        )

                                    [1] => Array
                                        (
                                            [columnId] => 1225963934640004
                                            [value] => Submitted
                                            [displayValue] => Submitted
                                        )

                                    [2] => Array
                                        (
                                            [columnId] => 4979307467564932
                                            [value] => 2020-02-18
                                        )
                                    [3] => Array
                                        (
                                            [columnId] => 3203730339325828
其中,[value]和[displayValue]并不总是显示。当我在数组中循环时,我需要能够将[value]插入为空或0。我不能让循环跳过键

$j = count($dataID['rows']);
for ($i = 0; $i < $j; $i++) {
    array_push($dataRows, array_column($dataID['rows'][$i]['cells'], 'value'));
}
$j=count($dataID['rows']);
对于($i=0;$i<$j;$i++){
array_push($dataRows,array_column($dataID['rows'][$i]['cells'],'value'));
}

欢迎来到stackoverflow:-)

在这种情况下,如果列不存在,
array\u列
将跳过。我想添加一个用户函数,您可以在其中控制默认值并使用
array\u map

您的自定义功能:

function array_column_with_default(array $array, string $key, $default = null)
{
    return array_map(function ($item) use ($key, $default) {
        if (false === array_key_exists($key, $item)) {
            return $default;
        }
        return $item[$key];
    }, $array);
}
下面是使用
array\u map()
而不是
array\u column
的代码示例:

$j = count($dataID['rows']);
for ($i = 0; $i < $j; $i++) {
    array_push($dataRows, array_column_with_default($rows[$i]['cells'], 'value', ''));
}
将输出以下内容

array(2) {
  [0] =>
  array(3) {
    [0] =>
    string(8) "Approved"
    [1] =>
    string(9) "Submitted"
    [2] =>
    string(10) "2020-02-18"
  }
  [1] =>
  array(3) {
    [0] =>
    string(12) "Not Approved"
    [1] =>
    string(13) "Not Submitted"
    [2] =>
    string(0) ""
  }
}


欢迎来到stackoverflow:-)

在这种情况下,如果列不存在,
array\u列
将跳过。我想添加一个用户函数,您可以在其中控制默认值并使用
array\u map

您的自定义功能:

function array_column_with_default(array $array, string $key, $default = null)
{
    return array_map(function ($item) use ($key, $default) {
        if (false === array_key_exists($key, $item)) {
            return $default;
        }
        return $item[$key];
    }, $array);
}
下面是使用
array\u map()
而不是
array\u column
的代码示例:

$j = count($dataID['rows']);
for ($i = 0; $i < $j; $i++) {
    array_push($dataRows, array_column_with_default($rows[$i]['cells'], 'value', ''));
}
将输出以下内容

array(2) {
  [0] =>
  array(3) {
    [0] =>
    string(8) "Approved"
    [1] =>
    string(9) "Submitted"
    [2] =>
    string(10) "2020-02-18"
  }
  [1] =>
  array(3) {
    [0] =>
    string(12) "Not Approved"
    [1] =>
    string(13) "Not Submitted"
    [2] =>
    string(0) ""
  }
}


此代码循环通过
$dataID['row']
的每个元素,并在
$row['cells']
的每个元素中循环,以添加两个键(如果它们不存在):

foreach( $dataID['rows'] as &$row ) {
  foreach( $row['cells'] as &$cell ) {
    if( !array_key_exists( 'value', $cell ) )  {
      $cell['value'] = null;
    }
    if( !array_key_exists( 'displayValue', $cell ) )  {
      $cell['displayValue'] = null;
    }
  }
}
因此,此数组
(您的简短版本)

变成:

Array
(
    [rows] => Array
        (
            [0] => Array
                (
                    [cells] => Array
                        (
                            [0] => Array
                                (
                                    [value] => 
                                    [displayValue] => 
                                )

                            [1] => Array
                                (
                                    [value] => 
                                    [displayValue] => 
                                )

                        )

                )

        )

)

此代码循环通过
$dataID['row']
的每个元素,并在
$row['cells']
的每个元素中循环,以添加两个键(如果它们不存在):

foreach( $dataID['rows'] as &$row ) {
  foreach( $row['cells'] as &$cell ) {
    if( !array_key_exists( 'value', $cell ) )  {
      $cell['value'] = null;
    }
    if( !array_key_exists( 'displayValue', $cell ) )  {
      $cell['displayValue'] = null;
    }
  }
}
因此,此数组
(您的简短版本)

变成:

Array
(
    [rows] => Array
        (
            [0] => Array
                (
                    [cells] => Array
                        (
                            [0] => Array
                                (
                                    [value] => 
                                    [displayValue] => 
                                )

                            [1] => Array
                                (
                                    [value] => 
                                    [displayValue] => 
                                )

                        )

                )

        )

)
“所以这不是一个代码编写服务”,但我要说的是:我从不建议在浏览数据结构时尝试修改它。取而代之的是“浏览一遍,建立一些你需要做的更改的列表。”然后,在浏览完成后,返回并应用这些更改

或者,每次进行更改时,都要重新启动walk。

“因此不是代码编写服务”,但我要说的是:我从不建议在遍历数据结构时尝试修改它。取而代之的是“浏览一遍,建立一些你需要做的更改的列表。”然后,在浏览完成后,返回并应用这些更改


或者,每次进行更改时,都要重新开始行走。

不知道您想要在这里使用
数组_push
做什么,也不知道
$dataRows
应该是什么。这里需要第二个循环,检查每行项目中的所有
单元格
,然后插入该级别上的属性(如果缺少)。不知道您想要在这里推送
数组什么,或者
$dataRows
应该是什么。这里需要第二个循环,检查每一行项目中的所有
单元格
,然后插入该级别上缺少的属性。