-1

この行のビューで未定義のインデックスを取得している理由を理解しようとしています:

<?php if ($allies[''] == 'No Wrestlers In Database') {

コントローラ:

if (empty($rosterList)) {
        $allies[] = 'No Wrestlers In Database';
}
else
{
        $allies[] = 'Please Select An Option';
        foreach ($rosterList AS $ally)
        {
            $allies[$ally->id] = $ally->rosterName;
        }
}

意見:

<?php if ($allies[''] == 'No Wrestlers In Database') {
    echo $allies[''];
}
else {
    echo form_dropdown( 'ally1', $allies, $alliesList->ally1ID);
} ?>

編集 :

最初のドロップダウンに正しい値が表示されない理由を理解しようとしています。alliesList print_r

Array
(
[0] => stdClass Object
    (
        [id] => 1
        [rosterListID] => 1
        [ally1ID] => 2
        [ally2ID] => 3
        [ally3ID] => 2
        [ally4ID] => 3
        [ally5ID] => 2
    )

)

味方 print_r

Array
(
[0] => Please Select An Option
[1] => Kid Wonder
[3] => Oriel
[2] => Test Character
 )

編集2:

これが私が作ったものですが、ビューファイルで、オブジェクト以外のプロパティを取得しようとしているというエラーが表示されます。

//Get member's allies
    $alliesList = $this->bios->getRosterAlliesByRosterID($this->session->userdata('defaultRosterListID'));
    echo "<pre>";
    print_r($alliesList);
    echo "</pre>";
    // Get list of members
    $rosterList = $this->bios->getAllRoster();
    $allies = array();
    if (empty($rosterList)) {
        $allies[''] = 'No Wrestlers In Database';
    }
    else
    {
        $allies[''] = 'Please Select An Option';
        foreach ($rosterList AS $ally)
        {
            $allies[$ally->id] = $ally->rosterName;
        }
    }
    echo "<pre>";
    print_r($alliesList);
    echo "</pre>";  

<?php echo form_label( 'Ally 1', 'ally1'); ?>
<div>
    <?php if (in_array('No Wrestlers In Database', $allies)) {
         echo 'No Wrestlers In Database';
    }
    else {
         echo form_dropdown( 'ally1', $allies, $alliesList->ally1ID);
    } ?>
</div>
4

3 に答える 3

4

割り当て時に、割り当てインデックスが配列で 0 から n にインクリメントされるためです。したがって、これが必要になります:

 if ($allies[0] == 'No Wrestlers In Database')
于 2012-04-17T15:51:32.830 に答える
3

$arr[] を使用すると、キー '' の値は作成されませんが、配列の末尾に要素がプッシュされます。

于 2012-04-17T15:51:44.793 に答える
2

あなたは配列宣言について誤解しています。

$allies['']は$allies[]と等しくありません

$ allies []は、オブジェクトを配列の最後に追加するために使用されます。キーは自動的にインクリメントします。

$ allies ['']、これ、''は文字列であるため、値はキー''を使用して配列に保存されます

配列のキーについて詳しくは、こちらをご覧ください

キーは整数または文字列のいずれかです。値は任意のタイプにすることができます。

有効な整数を含む文字列は、整数型にキャストされます。たとえば、キー「8」は実際には8の下に格納されます。一方、「08」は有効な10進整数ではないため、キャストされません。

nullは空の文字列にキャストされます。つまり、キーnullは実際には""の下に格納されます。

本当に表示したい場合は、コントローラーの $allies[]$allies['']に変更できます。

'データベースにレスラーがいない'が配列にあるかどうかを確認したい場合は、in_array()関数を使用する必要があります。

于 2012-04-17T16:09:52.393 に答える