web-dev-qa-db-ja.com

未定義のオフセット1

未定義のオフセット:1

こんにちは... 3行目のオフセットが未定義:1であるという問題に直面しています。それがどのタイプのエラーなのか理解できません。誰もそのようなエラーがPHPで発生する理由を教えてもらえますか

行の未定義オフセット:3

    foreach ($lines as $line)
    {
      list($var,$value) = explode('=', $line); //line 3
      $data[$var] = $value;
    }
15
tushAR

設定されていない配列インデックスにアクセスしようとしているため、PHP noticeを取得しています。

list($var,$value) = explode('=', $line);

上記の行は、文字列$line=で展開し、0th$var値を割り当て、1st$value値を割り当てます。この問題は、$line=なしの文字列が含まれている場合に発生します。

21
Nauphal

これは古い質問であり、提供された答えで十分です。

設定されていない配列インデックスにアクセスしようとしているため、PHP=通知を取得しています。

しかし、list()/explode()コンボを使用して空の配列がある場合がある場合に、未定義のインデックスの問題を克服する最良の方法は、array_pad()

理由は、list()を使用すると、配列から必要な変数の数がわかるからです。

例えば:

_$delim = '=';
$aArray = array()
$intNumberOfListItems = 2;


list($value1, $value2) = array_pad(explode($delim, $aArray, $intNumberOfListItems ), $intNumberOfListItems , null);
_

基本的に、list()変数に必要な値の数を示す3番目のパラメーターを渡します(上記の例2)。次に、配列にリスト変数の値が含まれていない場合、array_pad()を使用してデフォルト値(上記の例ではnull)を指定します。

9
mrjamesmyers

これは、$lineには「= "は、array.list()に要素を1つだけ含む文字列内の任意の場所にあります。1回の操作で変数のリストを割り当てます。リストには2つの要素が含まれます。それを解決する方法は、 array_pad() メソッドを使用することです。

list($var,$value) = array_pad(explode('=', $line),2,null);
1
Stan Fad

list($ var、$ value)を行うことにより、phpは2つの要素の配列を期待します。explode関数が等号記号を見つけられない場合、1つの要素を持つ配列のみを返し、未定義のオフセットエラーが発生します。オフセット1は2番目です配列の要素なので、おそらく$ line変数の1つに等号がありません

1

これは配列によるものです。この未定義のオフセットエラーのため、配列インデックスは表示されません...

したがって、print_r関数を使用して配列を確認してください。

1
Prakash

list言語構造は、配列から個々の変数を作成するために使用されます。配列にlist呼び出しで予想される変数の数に対して十分な要素がない場合、エラーが発生します。あなたの場合、2つの変数があるので、インデックス0と1の2つのアイテムを持つ配列が必要です。

http://php.net/manual/en/function.list.php

1
leftclickben

解決:

$lines = array('one' => 'fruit=Apple', 'two' => 'color=red', 'three' => 'language');

foreach ($lines as $line)
{
    list($var,$value) = (strstr($line, '=') ? explode('=', $line) : array($line, ''));
    $data[$var] = $value;
}

print_r($data);

これを試してください。

参照用 http://in1.php.net/manual/en/function.list.phphttp://in1.php.net/manual/en/function.explode。 php

1
Mahesh