2016-08-18 65 views
-3

我想將兩個數組保存在一個數組中。 此示例適用PHP - 保存一個數組,如果缺少一個值

$myArray = []; 
    $a = [1,2,3,4]; 
    $b = [1,2,3,4]; 

輸出

Array 
(
[a] => Array 
    (
    [0] => 1 
    [1] => 2 
    [2] => 3 
    ) 
[b] => Array 
    (
    [1] => 11 
    [2] => 22 
    [3] => 33 
) 
) 

我的問題是,當陣列中的一個值丟失,則涉及到一個錯誤

Array 
(
[a] => Array 
    (
    [0] => 1 
    [1] => 2 
    [2] => 3 
) 
[b] => Array 
    (
    [1] => 11 
    [2] => 
    [3] => 33 
) 
) 

我需要這樣的輸出。如果缺少一個值

Array 
(
[a] => Array 
    (
    [0] => 1 
    [2] => 3 
) 
    [b] => Array 
    (
    [1] => 11 
    [3] => 33 
) 
) 

我該怎麼做? 謝謝。

+2

是否所述第一數組的值引用第二陣列的鍵?你想檢查第二個數組是否有值,如果它們是從第一個元素中刪除該元素加上相關元素? –

+0

使用if(!empty($ val)){} –

+0

是的,但第二個數組可以有一個引用鍵。 – Mark

回答

0

在php中有一個函數:array_filter,它將刪除數組中所有等於false的項(==)。你可以調整這個函數以遞歸工作,所以它也會從子數組中刪除所有的空值。

的方法應該是這樣的:

function array_filter_recursive($input) 
    { 
    foreach ($input as &$value) 
    { 
     if (is_array($value)) 
     { 
     $value = array_filter_recursive($value); 
     } 
    } 

    return array_filter($input); 
    } 

並讓您的新數組沒有空值只需要調用是這樣的:

$myArray = array_filter_recursive($myArray); //Or pass the array name where you have the data. 
0

給這個函數去...

function removeBlankElements(array & $firstArray, array & $secondArray) 
{ 
    // Search for null, '', or false values in $secondArray 
    $secondArrayRemovalIndexes = array_unique(array_merge(array_keys($secondArray, null), array_keys($secondArray, ''), array_keys($secondArray, false))); 
    $firstArrayRemoveIndexes = []; 
    // Build up an array of index in the $firstArray for the blank values found in the $secondArray 
    foreach ($secondArrayRemovalIndexes as $secondIndex) { 
     $firstIndex = array_search($secondIndex, $firstArray); 
     if ($firstIndex !== false) { 
      $firstArrayRemoveIndexes[] = $firstIndex; 
     } 
    } 
    // Remove the indexes we have built up. 
    $firstArray = array_diff_key($firstArray, array_flip($firstArrayRemoveIndexes)); 
    $secondArray = array_diff_key($secondArray, array_flip($secondArrayRemovalIndexes)); 
} 

然後在實踐中它會看起來像這樣:

// Here's the demo array you have 
$x = [ 
    'a' => [ 
     0 => 1, 
     1 => 2, 
     2 => 3, 
    ], 
    'b' => [ 
     1 => 11, 
     2 => null, 
     3 => 33, 
    ], 
]; 
// Run the function passing in our 2 arrays 
removeBlankElements($x['a'], $x['b']); 

而結果..

var_dump($x); 

array(2) { 
    'a' => 
    array(2) { 
     [0] => 
    int(1) 
    [2] => 
    int(3) 
    } 
    'b' => 
    array(2) { 
     [1] => 
    int(11) 
    [3] => 
    int(33) 
    } 
}