2016-08-18 3 views
-3

2つの配列を配列に保存したい。 この例では動作します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

最初の配列の値は、二番目の配列のキーを参照していますか?そして、2番目の配列から値が欠落していないかどうかをチェックし、その要素と最初の配列から関連する要素を削除する場合は、 –

+0

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

+0

はい、正確に2番目の配列には参照キーを持つことができます。 – Mark

答えて

0

php:array_filterには、配列から偽(==)に等しいすべての項目を削除する関数があります。この関数を再帰的に動作させることで、サブ配列からすべての空の値も削除されます。

方法は次のようになります。

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) 
    } 
} 
関連する問題