こんにちは... 3行目のオフセットが未定義:1であるという問題に直面しています。それがどのタイプのエラーなのか理解できません。誰もそのようなエラーがPHPで発生する理由を教えてもらえますか
行の未定義オフセット:3
foreach ($lines as $line)
{
list($var,$value) = explode('=', $line); //line 3
$data[$var] = $value;
}
設定されていない配列インデックスにアクセスしようとしているため、PHP notice
を取得しています。
list($var,$value) = explode('=', $line);
上記の行は、文字列$line
を=
で展開し、0th
に$var
値を割り当て、1st
に$value
値を割り当てます。この問題は、$line
に=
なしの文字列が含まれている場合に発生します。
これは古い質問であり、提供された答えで十分です。
設定されていない配列インデックスにアクセスしようとしているため、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)を指定します。
これは、$line
には「=
"は、array.list()に要素を1つだけ含む文字列内の任意の場所にあります。1回の操作で変数のリストを割り当てます。リストには2つの要素が含まれます。それを解決する方法は、 array_pad() メソッドを使用することです。
list($var,$value) = array_pad(explode('=', $line),2,null);
list($ var、$ value)を行うことにより、phpは2つの要素の配列を期待します。explode関数が等号記号を見つけられない場合、1つの要素を持つ配列のみを返し、未定義のオフセットエラーが発生します。オフセット1は2番目です配列の要素なので、おそらく$ line変数の1つに等号がありません
これは配列によるものです。この未定義のオフセットエラーのため、配列インデックスは表示されません...
したがって、print_r関数を使用して配列を確認してください。
list
言語構造は、配列から個々の変数を作成するために使用されます。配列にlist
呼び出しで予想される変数の数に対して十分な要素がない場合、エラーが発生します。あなたの場合、2つの変数があるので、インデックス0と1の2つのアイテムを持つ配列が必要です。
解決:
$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