2011-01-09 7 views
-4

連想配列をチェックする方法はたくさんありますが、 "完全連想"配列をどうやってチェックしますか?PHP〜完全連想配列をテストする方法

​​

ここで、$ johnは完全結合であり、$ mary1と$ mary2は完全結合ではありません。

+4

チェック連想配列ではどういう意味ですか?すべての値に指定されたキーがあることを意味しますか? – alexn

+0

「チェック」は何を意味しますか?配列に連想キーのみが含まれているかどうかを知りたいですか?連想配列を循環させて値をチェックしますか?あなたがここで何を求めているのか分かりません。 – dqhendricks

+0

'$ john'と' $ mary1'の違いはわかりません。 –

答えて

2

すべての配列が同じ方法で実装されているため、簡潔にすることはできません。 docsから:

PHPの配列は、実際に命じマップです。マップは、キーに値を関連付けるタイプです。

の場合は、実装には洞察力を持っていないが、私はarray(1,2,3)はすなわち、最終的に、それはまったく同じです、array(0=>1, 1=>2, 2=>3)ためだけの省略形であることを確信しています。あなたがそれを区別できるものは何もありません。

あなただけ仮定できarray(value, value,...)で作成された配列は0でインデックスを持っているし、他の人がいないこと。しかし、あなたはすでにこれが必ずしも当てはまるとは限りません。

「結合」配列を検出しようとするたびに、ある時点で失敗します。

実際の質問はなぜですか?

+0

あなたは正しいです。だからこそ$ mary1 === $ mary2! – AdeleK

+0

なぜですか?私はいくつかのconfig配列を調べ、それらが正しく設定されていることを確認する必要があるので。 – AdeleK

+0

@AdeleK:あなたのケースで正しく設定されていることはどういう意味ですか?あなたはどのようにconfigアレイにアクセスしますか?有効なキーだけが含まれており、すべてのキーが含まれていることを確認したい場合は、それらのキーを使用して配列を定義し、 'array_intersect($ keys、array_keys($ config))'が空であるかどうかを確認できます。たぶんあなたの問題を実際に述べるほうが、可能な解決法がうまくいくかどうかを尋ねるよりも良いのですが)(しかし、あなたはその質問のために新しい質問を作成するべきです)。 –

1

これはあなたが探しているものですか?

<?php 
function is_assoc($array) { 
    if(!is_array($array) || array_keys($array) == range(0, count($array) - 1)) { 
     return(false); 
    } 
    foreach($array as $value) { 
     if(is_array($value) && !is_assoc($value)) { 
      return(false); 
     } 
    } 
    return(true); 
} 
?> 

検出は、関連性の定義によって異なります。この関数は、シーケンシャルな数値キーを持たない配列を意味する結合をチェックします。連想は、キーが暗黙的に設定されたもので、phpによって計算されたものではないと言う人もいます。他の人は、すべてのPHP配列を結合型として定義することもできます(この場合、is_array()は十分です)。繰り返しますが、それはすべて依存しますが、これは私のプロジェクトで使用する関数です。うまくいけば、それはあなたのために十分です。

+0

悲しいことに、配列が完全に結合していることを確認する方法を探しています。私は、すべてのキーが定義されており、自動的に設定されないことを意味します。これは、文字列キーだけとは関係ありません。 – AdeleK

+0

これはまさにこの機能の役割です。 PHPが自動的に設定するキーは、0から始まる数字です。この関数は、配列またはサブ配列のすべてのキーが0から始まる連続した数値である場合にのみfalseを返しますが、 PHPが配列を処理する方法。私の知る限りでは、関連するキーと値のペアが「自動的にキーを設定した」値と混在していることを検出する方法はありません。 –

+0

私の知るところでは:-)それで、私はここに来て、私がいかに正しいか悪いかを見ようとしたのです。ありがとう – AdeleK