【问题标题】:Modify empty keys in associative array in php修改php中关联数组中的空键
【发布时间】:2021-03-14 20:30:20
【问题描述】:

我在 wordpress 中有一个很长的表单,由用户填写,然后通过 API 提交给第三方 crm。

问题是如果用户没有填写一个字段,这些字段将是 false 或为空,并且 remote_post 将失败。

我尝试使用 foreach 向空字段添加自定义值,但它们位于关联数组中,我不知道如何修改它。

这是我目前的代码(我更改了值但结构相同):

$body = [
'array1' => [
'key1' => user(value),
'key2' => user(value),
'key3' => user(value),
    ],

'array2' => [
'key1' => user(value),
'key2' => user(value),
'key3' => user(value),
    ],

'array3' => [
[   
'key1' => user(value),
'key2' => user(value),
'key3' => user(value),
],
[   
'key1' => user(value),
'key2' => user(value),
'key3' => user(value),
],
    ],

'array4' => [
    'subarrray1' => [
     'key1' => user(value),
     'key2' => user(value),
     'key3' => user(value),
    ],
    'subarray2' => [
     'key1' => user(value),
     'key2' => user(value),
     'key3' => user(value),
    ],
],

];

//this work only with some arrays and only change value inside the second array
foreach($body as $row => $innerArray){
    foreach($innerArray as $key => $value){
        if ( empty($value) ) $value = 'empty o whatever';
    } 
}

【问题讨论】:

  • 您的标题非常具有描述性,是您问题的一个很好的开始:)。我们可能可以通过使其成为更好的 SEO 的真正问题来改进它,从而帮助其他有相同问题的开发人员。不过,“发布前”部分有点误导恕我直言。

标签: php arrays wordpress foreach


【解决方案1】:

你可以使用递归

$body = [
    'array1' => [
        'key1' => 123,
        'key2' => '',
        'key3' => '',
    ],

    'array2' => [
        'key1' => '',
        'key2' => '',
        'key3' => 123,
    ],

    'array3' => [
        [
            'key1' => '',
            'key2' => '',
            'key3' => '',
        ],
        [
            'key1' => '',
            'key2' => '',
            'key3' => 123,
        ],
    ],

    'array4' => [
        'subarrray1' => [
            'key1' => '',
            'key2' => 123,
            'key3' => '',
        ],
        'subarray2' => [
            'key1' => '',
            'key2' => '',
            'key3' => '',
        ],
    ]
];


function replace_empty(&$arr) {
    if(is_iterable($arr)) {
        foreach ($arr as &$row) {
            replace_empty($row);
        }
    } elseif (empty($arr)) {
        $arr = 'empty o whatever';
    }
}

replace_empty($body);

var_dump($body);

【讨论】:

    【解决方案2】:

    你可以像这样修改原始数组

    foreach($body as $row => $innerArray){
        foreach($innerArray as $key => $value){
            if ( empty($value) ) {
                $body[$row][$key] = 'empty o whatever';
            }
        } 
    }
    

    您还可以通过在 foreach 循环中添加一个 & 符号来通过引用获取值。更改值将更新原始数组,如下例所示:

    foreach($body as $row => &$innerArray){
        foreach($innerArray as $key => &$value){
            $value = 'empty o whatever';
        } 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-25
      • 2013-09-13
      • 2017-06-17
      • 2023-03-21
      • 2016-08-21
      • 2013-04-17
      • 2019-02-21
      • 1970-01-01
      相关资源
      最近更新 更多