5

Web サイトで URL 書き換えを使用しようとしています。関数list()explode()関数を使用して適切なコンテンツを取得したいと考えています。現在、私のコードは次のようになっています。

list($dir, $act) = explode('/',$url);

この場合$url、絶対 URL の最初のスラッシュの後のすべてと同じです。つまりhttp://example.com/random/stuff => $url = random/stuff/、これは正常に機能しますが、移動したい場合はhttp://example.com/random/、ページに通知が出力されます。list()通知が表示されないようにするにはどうすればよいですか? 関数以外の何かを使用する必要がありますか?

現在、通知は「通知: 未定義のオフセット: 1...」です。

助けてくれてありがとう!

4

8 に答える 8

22

これを試して :

list($dir, $act) = array_pad(explode('/',$url), 2, '');

array_padあなたの値で配列を完成させてください''

于 2014-11-10T13:28:38.103 に答える
11

URL に含まれるパス セグメントの数を確認する必要があります。

$segments = explode('/', $url);
if (count($segments) !== 2) {
    // error
} else {
    list($dir, $act) = $segments;
}

ただし、 を使用するよりも柔軟なアプローチを選択する必要があるかもしれませんlist

于 2010-03-01T18:18:52.793 に答える
4

チェックアウトparse_url

于 2010-03-01T18:28:37.450 に答える
1

解決策は、コード行をいくつかに分割して、存在しない値を変数に割り当てないようにすることです。これはexplode、URL の一部のみを返す場合に行っていることです。

そのためには、 list を使用しないことlistが適切な解決策のように思えます。なぜなら、リストでは、式の右側にある要素がいくつ返されるかを知っている必要があるから=です...
そして、この状況では、返される要素の数がわからないのですexplode


たとえば、次のようなもので問題ありません。

$parts = explode('/', $url);
if (isset($parts[0])) {
  $dir = $parts[0];
  if (isset($parts[1])) {
    $act = $parts[1];
  }
}

もちろん、スクリプトの後半で$dirand/orが設定されていない状況に対処するのはあなた次第です。$act


別の解決策は、爆発が返す要素の数を確認することです(たとえば、数を数え/ます)。ただし、少なくとも 2 つのケースに対処する必要があります。

于 2010-03-01T18:18:36.303 に答える
1

通知を取り除くには:

list($dir, $act) = explode('/',$url);

しかし、おそらくより良い解決策は次のとおりです。

$segments = explode ('/', $url);
$dir = array_shift ($segments);
$act = array_shift ($segments);

2 番目のセグメントがない場合、$act は null になり、この方法で 2 つ以上のセグメントを作成することもできます

于 2010-03-01T18:22:33.970 に答える
1

PHP 5.4 以降のリスト割り当てで E_NOTICE を抑制する正しい方法は次のとおりです。

@list($dir, $act) = explode('/', $url);

$urlが含まれていない場合/、explode は 1 つの要素を返し、$actになりますNULL

于 2016-12-06T09:04:04.760 に答える
0

完全な URL を展開する代わりに、$_SERVER['PATH_INFO']'/random' がスクリプトの名前であると仮定して を試してください。

于 2010-03-01T18:19:53.410 に答える
0

シンプルで醜い答えは、エラー出力を抑制する単一の「@」をすべての前に付けることです。その場合、 $act は null に設定されます。内部的には次と同等であるためです。

$foo = explode('/',$url);
$dir = $foo[0];
$act = $foo[1]; // This is where the notice comes from
于 2010-03-01T18:20:57.777 に答える