2016-05-01 13 views
2

キーが存在するかどうかによって、別のイメージをエコーし​​たい。ここで配列値に応じて異なるイメージをエコーする

だから名前フィールドが常にではない、私は

["Person"] => array(11) { 
    ["id"] => int(38482818123) 
    ["weight"] => int(140) 
    ["height"] => int(65) 
} 
["Name"] => array(2) { 
    ["firstname"] => string(4) "John" 
    ["lastname"] => string(5) "Smith" 
} 

を使用しているアレイの例です。名前がある場合はimage a、名前がない場合はimage bと表示する必要があります。

私が試したもの:

foreach($personArray as $person) 
{ 
    if ($person['Name'] != '') 
    { 
     echo "<img src='image-a.png'>"; 
    } 
    else 
    { 
     echo "<img src='image-b.png'>"; 
    } 
} 

今私が持っている問題は、人が名前を持っているにもかかわらず、私だけではなく、image a

Iのページに両方の画像を見ているということですarray_key_exists("Name", $personArray);を使用してみましたが、なんらかの理由で私は結果としてbool(false)を取得しています。あなたは以下のようなempty()を使用する必要が

Array

+0

あなたは配列を反復しています。だから、名前がついている人もいれば、そうでない人もいるでしょう。 – mkasberg

+0

[空()](http://php.net/manual/en/function.empty.php)があなたが探している機能かもしれません。 '!empty($ person ['Name'])' – mkasberg

+1

私が見るところでは、Person配列には名前の値が含まれていません。名前は別々の配列ですか? – CmdrSharp

答えて

1

: -

if(!empty($personArray['person']['Name'])){ 
    //image a code 
}else{ 
    //image b code 
} 
+0

これはまだ両方が表示されていますが、私はなぜ1人の配列でそれをやっているのか分かりません。 –

+0

これをループの外側で使用できますか? –

+0

私の配列は、 '$ result'という名前の変数の中にjson_decodedされています。私はちょうど私のループの外であなたのソリューションを試して、名前フィールドが埋め込まれている場合画像2を与えます。 –

3

まず、あなたのようなものを持っていない、なぜかしら、あなたが名前のために別の配列を持っているようです。

["Person"] => array(11) { 
 
    ["id"] => int(38482818123) 
 
    ["weight"] => int(140) 
 
    ["height"] => int(65) 
 
    ["firstname"] => string(4) "John" 
 
    ["lastname"] => string(5) "Smith" 
 
    }

この場合、キー「firstname」、「lastname」を持つ配列インデックスは、一部の人には設定されていない可能性があります。したがって、そのインデックスが使用されているかどうかを確認できます。

isset(); 機能

試してみてください。

foreach($personArray as $person) 
 
{ 
 
    if (isset($person['firstname']) && isset($person['lastname'])) // You may use or as well || 
 
    { 
 
     echo "<img src='image-a.png'>"; 
 
    } 
 
    else 
 
    { 
 
     echo "<img src='image-b.png'>"; 
 
    } 
 

 

 
    // Or as a short hand if statement: 
 

 
    echo (isset($person['firstname'])&& isset($person['lastname'])) ? "<img src='image-a.png'>" : "<img src='image-b.png'>"; 
 
}

編集:Personと名前:あなたはまだ二つの異なるアレイを使用しているように見える1 。これは、特定の人が名前の価値を持っているかどうかを言うことはできません: 例:10人の人がいて、名字が姓に7人しかない場合、あなたはperson [0]、person [1 ] .....人[9]と名前[0] ...名前[6]。 コンストラクトごとに、Person配列とName配列の間に参照/リンクはありません。 1人目が名前を持っているとしたら、Person [0]とName [0]は同じ人物を表します。しかし、最初の3人が名前を持たない場合、Person [3]はName [0] ...を持ちます。したがって、特定のName配列がどのPersonに属しているのかを特定することはできません。そして注意:Personのforeach()の中でName ["firstname"]を使うことはできません。名前配列は、名前[0] ["firstname"]、名前[0] ["lastname"]などの形式であるためです。

ボトムライン:

可能な場合には、人の列そのもので姓ファーストネームを含める/使用するようにしてください。そうすれば、foreach()を使ってPerson配列を反復/ループするときに、それぞれの人がfirstname、lastnameを持っているかどうかを調べることができます。

+0

私はあなたの答えを試みたが、私はまだ両方の画像を持っていた。私は私の質問で配列をあまり描写していないかもしれないが、あなたがもう一度見たいと思ったら、その写真を撮った。 –

+0

あなたのコードはループ外の配列でも動作します。ありがとうございます! –

+0

まあ偉大な:) –

関連する問題