7

以下を達成するための最良の方法は何ですか。

私はこの形式の文字列を持っています:

$s1 = "name1|type1"; //(pipe is the separator)
$s2 = "name2|type2";
$s3 = "name3"; //(in some of them type can be missing)

nameN/は文字typeN列であり、パイプを含めることはできません。

名前/タイプを個別に抽出する必要があるため、次のようにします。

$temp = explode('|', $s1);
$name = $temp[0];
$type = ( isset($temp[1]) ? $temp[1] : '' );

isset($temp[1])またはcount($temp). _

ありがとう!

4

5 に答える 5

8
list($name, $type) = explode('|', s1.'|');
于 2010-05-19T16:18:37.737 に答える
4

Explode() の引数の順序に注意してください

list($name,$type) = explode( '|',$s1);

$s3 の場合、$type は NULL になりますが、Noticeが表示されます

于 2010-05-19T16:15:34.463 に答える
3

私はarray_pop()andのファンですarray_shift()。これらは、使用する配列が空の場合でもエラーになりません。

あなたの場合、それは次のようになります。

$temp = explode('|', $s1);
$name = array_shift($temp);
// array_shift() will return null if the array is empty,
// so if you really want an empty string, you can string
// cast this call, as I have done:
$type = (string) array_shift($temp);
于 2010-05-19T17:03:47.843 に答える
0

isset$temp[1] が存在し、コンテンツが空の値になるため、実行する必要はありません。これは私にとってはうまくいきます:

$str = 'name|type';

// if theres nothing in 'type', then $type will be empty
list($name, $type) = explode('|', $str, 2);
echo "$name, $type";
于 2010-05-19T16:16:29.937 に答える
-1
if(strstr($temp,"|"))
{
   $temp = explode($s1, '|');
   $name = $temp[0];
   $type = $temp[1];
}
else
{
   $name = $temp[0];
   //no type
}

多分?

于 2010-05-19T16:14:59.147 に答える