2016-05-19 8 views
1

Iは、例えば(キー番号は、ユーザ入力に依存して変化することができる)の下に、その中に格納された複数のアレイと、ポスト値に基づいて配列を格納している:多次元PHP配列の特定のキーと値をチェックする方法はありますか?

Array (
[1] => Array 
    ([system] => A [serial]=> 12345L) 
[3] => Array 
    ([system] => B [serial] =>) 
[4] => Array 
    ([system] => D [serial] => 56789L [licence] => ABCD1-EFGH2-IJKL3-MNOP4-QRST5) 
[5] => Array 
    ([serial] => 98765L [licence] => 1234567890) 
) 

注:それは価値があるかどうかはわかりません上記の例では配列キーは1345ですが、123456または56などとなる可能性があります。

それぞれの配列にシステムキーとシリアルキーがあることを確認したいと思います両方とも価値があります。ライセンスキーはオプションです。

私の例では、1 & 4は有効ですが、3はシリアルの値が欠けているわけではなく、システムのキーがないため5もありません。

これは、配列の内側にあるため、私はこれについてどうやって行くのかが少し分かりません。しかし、私は非常に基本的で、私は非常に非効率的であると想像することができます以下を作った。

foreach($sys_arr as $k => $v) { 
    if (is_array($v) == true) { 
    foreach($v as $key => $value) { 
     if ($key = "system" && $value == null) { 
     echo "Error: System has no value<br>"; 
     } elseif ($key = "serial" && $value == null) { 
     echo "Error: Serial has no value<br>"; 
     } else { 
     echo "Both keys have values<br>"; 
     } 
    } 
    if (!array_key_exists("system", $v)) { 
     echo "Error: No System Key<br>"; 
    } elseif (!array_key_exists("serial", $v)) { 
     echo "Error: No Serial Key<br>"; 
    } else { 
     echo "Both Keys exist!<br>"; 
    } 
    } 
} 

私はこれをどのように改善することができるのですか?

+0

のようなものは、あなたが出力あなたが必要とされなければならないものを提供してくださいすることができますか? –

+0

問題は解決しましたか? :) –

答えて

2

これは動作するはずです:

$array = [ 
    ['system' => 'A', 'serial' => '1232'], 
    ['system' => 'B', 'serial' => ''], 
    ['system' => 'D', 'serial' => '1232', 'licence' => '123123'], 
    ['serial' => '&2312321', 'licence' => '123123'] 
]; 

$valid = []; 

foreach ($array as $key => $value) { 
    if (!isset($value['system'])) { 
     echo 'Error: No System Key<br>'; 
     continue; 
    } 
    if (!isset($value['serial'])) { 
     echo 'Error: No Serial Key<br>'; 
     continue; 
    } 

    if (empty($value['system'])) { 
     echo 'Error: System has no value<br>'; 
     continue; 
    } 
    if (empty($value['serial'])) { 
     echo 'Error: Serial has no value<br>'; 
     continue; 
    } 
    $valid[] = $value; 
} 

var_dump($valid); 
+0

このコードは、配列から不正な配列を削除するのに効果的ですが、この例では、システムとシリアル番号の両方を入力していないユーザーにエラーを表示したいと考えています。私は後で私のプロジェクトであなたの素晴らしいコードを使用することがあります! – BottyZ

+0

@BottyZここにエラー処理の新しいコードがあります:) –

+0

私が作ろうとしていたもののもっと単純なバージョンで助けてくれてありがとう。私は既に、上記と同様のアプローチを使用して、コードの他の部分のいくつかの改善について考えることができます。 – BottyZ

1

不要ますforeachを再びちょうどこの

foreach($sys_arr as $k => $v) 
{ 


    if (key($v['system']) = "system" && $v['system'] == null) 
    { 
    echo "Error: System has no value<br>"; 
    } 
    elseif (key($v['serial'])= "serial" && $v['serial'] == null) 
    { 
    echo "Error: Serial has no value<br>"; 
    } 
    else 
    { 
    echo "Both keys have values<br>"; 
    } 

if (!array_key_exists("system", $v)) 
{ 
    echo "Error: No System Key<br>"; 
} 
elseif (!array_key_exists("serial", $v)) 
{ 
    echo "Error: No Serial Key<br>"; 
} 
else 
{ 
    echo "Both Keys exist!<br>"; 
} 
} 
+0

あなたのご意見ありがとうございました。私はkey()関数を使用することができませんでした。しかし、これは私にとって現時点ではエラーになります。 PHPの致命的なエラー:最初のif行を参照する書き込みコンテキストでは関数の戻り値を使用できません。 – BottyZ

関連する問題