2015-01-07 9 views

答えて

9

存在するすべてのプログラミング言語と同様に、文字列は文字の配列として格納されます。私がやった場合

$area = "Dhaka"; 
echo $area[0]; 

それはDを返します。

私も実行して文字列全体をエコーできます

echo $area[0].$area[1].$area[2].$area[3].$area[4]; 

PHP will also type juggle a string into 0整数のみを受け付け形で渡されたとき。

そうすることによって:

echo $area['division']; 

をあなたは基本的にやっているでしょう:

echo $area[0]; 

と再びを、Dを取得。

だからこそ、isset($area['division'])trueの値を返します。

なぜ$area['foo']['bar'](別名$area[0][0])が機能しないのですか? $areaは1次元配列にすぎないためです。

is_array($area) && isset($area['division']) 
+0

は配列 – xendi

-1

あなたは、文字列や配列可能性がいずれかの変数を操作しているこの問題に対処する最善の方法は、配列としてあなたの変数を扱うしようとする前にis_array()でテストすることですこれは予想される動作です。

PHP Documentation covers this

あなたは()の代わりに、空試すことができます。

+2

'!empty($ area ['division'])'は '$ area ['division'] === 'D ' – sjagr

9

PHPを使用して、配列として文字列を扱うことができます:

$foo = 'bar'; 
echo $foo[1]; // outputs 'a' 

ので

$area['division'] 

があるため、キーは文字列にすることはできません(

$area[0]; 

として実行/解析されますそれは本当に配列ではないので、PHPはあなたのdivision文字列をconvert-to-intの規則で型変換します。 0)、明らかにダッカの文字Dに評価されます。

+0

'配列キーは文字列にできません' ???このシナリオでは文字列を受け付けませんが、配列キーはPHPで文字列として宣言できます。 – sjagr

+0

だからこそ私はあなたに私がした解決策を与えました。なぜなら、配列要素への参照として文字列を使用できることがわかっていても、PHPがキーとして受け入れるものは問題ではないからです。だからこそ私のソリューションは良い解決策です。 – xendi

+1

申し訳ありません。悪い言い訳。文字列を扱う場合、配列表記法のアクセスではキーの文字列を使用できません。答えを少し修正しました。 –

-1

存在しないキーに対してtrueを返す場合は、何もできません。ただし、コードに悪影響を与えないようにすることができます。 array_key_exists()を使い、配列要素に対してisset()を実行してください。

編集:実際には、array_key_exists()を使用すると、strlen()のようなものを誤って使用している場合や、array_key_existsがtrueを返した場合に値の型をチェックする必要はありません。

ポイントではなく、単に言ってISSET($アルゴン[「何か」])よりも、ですが実行します。

if(array_key_exists('something',$Ar)) 

し、必要に応じて、値の長さや種類を確認してください。配列をチェックする必要がある場合は、配列自体のisset()またはis_array()を使用する前に存在している必要があります。

+0

他の人の回答では、この動作が期待されると説明されていました。この解決策があなたが使いたいと思っていると思われる(またはそうでない)ことを考慮してください。 – xendi

+2

'array_key_exists'は、文字列を2番目の引数として渡すときに警告をスローします。いいえ、警告をスローするものを使用したくありません。 – sjagr

+0

このマニュアルの例では、array_key_exists( 'first'、$ search_array)が表示されます。第2引数として文字列を渡すのはなぜですか? – xendi

0

これは、なぜissetが正しく動作しないのかを説明するのではなく、解決策です。

配列要素がインデックス文字列に基づいて設定されているかどうかを確認する必要があります。ここで私はそれを行う可能性があります方法は次のとおりです。

function isset_by_strkey($KeyStr,$Ar) 
{ 
    if(array_key_exists($KeyStr,$Ar)) 
    { 
     if(strlen($Ar[$KeyStr]) > 0 || is_numeric($Ar[$KeyStr] !== FALSE) 
     { 
      return TRUE; 
     } 
     return FALSE; 
    } 
} 

isset_by_strkey('ANY_KEY',$area); // will return false if ANY_KEY is not set in $area array and true if it is. 
+0

これは問題を解決し、例のような多次元配列に簡単に適合させることができます。 – xendi

+0

これを行うには、関数に別の文字列パラメータを追加し、余分な文字列をキーとして使用して余分な次元をチェックする2つのパラメータをチェックする条件文を追加します。 – xendi

0

PHPでリニアアレイにアクセスするための最良の方法は、私はこのバグを持っていた

// string treated as an linear array 
$string= "roni" ; 
echo $string{0} . $string{1} . $string{2} . $string{3}; 

// output = roni 
関連する問題