2011-01-28 87 views
2

我有一个多维数组,可以是任何大小或深度。我基本上试图用值替换空值,但只在某些情况下。下面是该阵列的一个例子,这是相当大的,但我想说明我的观点还有:复制多维数组,但替换空值的递归PHP函数

[field_ter] => 
[field_title] => Array 
    (
     [0] => Array 
      (
       [value] => 
      ) 

    ) 

[field_firstnames] => Array 
    (
     [0] => Array 
      (
       [value] => test9 
      ) 

    ) 

[field_birth] => Array 
    (
     [0] => Array 
      (
       [value] => 
      ) 

    ) 

[field_postal] => Array 
    (
     [0] => Array 
      (
       [value] => 
      ) 

    ) 

[group_certificates] => Array 
    (
     [0] => Array 
      (
       [_delta] => 0 
       [field_cert_details] => Array 
        (
         [value] => 
        ) 

       [field_cert_issuedate] => Array 
        (
         [value] => Array 
          (
           [date] => 
          ) 

        ) 

       [field_cert_expiry] => Array 
        (
         [value] => Array 
          (
           [date] => 
          ) 

        ) 

       [field_cert_issue_country] => Array 
        (
         [value] => 
        ) 

       [field_cert_limits] => Array 
        (
         [value] => 
        ) 

      ) 

     [1] => Array 
      (
       [_delta] => 1 
       [field_cert_details] => Array 
        (
         [value] => 
        ) 

       [field_cert_issuedate] => Array 
        (
         [value] => Array 
          (
           [date] => 
          ) 

        ) 

       [field_cert_expiry] => Array 
        (
         [value] => Array 
          (
           [date] => 
          ) 

        ) 

       [field_cert_issue_country] => Array 
        (
         [value] => 
        ) 

       [field_cert_limits] => Array 
        (
         [value] => 
        ) 

      ) 

    ) 

我试图做的是发现是空的数组中的任何元素,然后替换为空值具有价值。我有一个空的元素没有被替换的例外数组。这是函数,我目前工作:

function check_empty(&$array) { 
    $exceptions = array('changed', 'form_build_id','date', 'status', 'op'); 
    // This is the array we will return at the end of the function 
    $new_array = array(); 
    foreach($array as $key => $value) { 
     if(is_array($value)) { 
      check_empty($value); 
     } 
     elseif ($value == '' && !in_array($key, $exceptions)) { 
      $new_array[$key] = '$$$'; 
     } 
     else { 
      $new_array[$key] = $value; 
     } 
    } 
    return $new_array; 
} 

有人能帮助我调整我的功能或指向我一个更好的办法的方向是什么?我尝试了array_walk_recursive,但它不适用于我的数组。

+0

请参考http://stackoverflow.com/editing-help关于如何格式化你的问题的帮助。在这里,我们使用一种名为Markdown的替代通常的HTML。 textarea上方有一些工具栏图标可以帮助您进行格式设置。欢迎来到这个网站! – BoltClock 2011-01-28 12:25:04

回答

2

您需要分配递归check_empty的返回值:

function check_empty($array) { 
    $exceptions = array('changed', 'form_build_id','date', 'status', 'op'); 
    // This is the array we will return at the end of the function 
    $new_array = array(); 

    foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $new_array[$key] = check_empty($value); 
     } 
     elseif ($value == '' && !in_array($key, $exceptions)) { 
      $new_array[$key] = '$$$'; 
     } 
     else { 
      $new_array[$key] = $value; 
     } 
    } 
    return $new_array; 
} 
+0

非常完美,非常感谢。有点业余的错误! – 2011-01-28 13:00:57

2
if(is_array($value)) { 
    check_empty($value); 
} 

在这里,您不会返回结果值到任何地方。也许这就是问题所在