-1

以下が可能かどうか疑問に思っています。下に書いたif文を一行(三項)にしたい。

cURL の配列で 3 進数 (省略形の php コード) を使用したいと考えています。

フォームデータの例:

$_POST['data'] = 'sometextrighthereisgood:this is what we want"; //user input example.

If ステートメント:

if(isset($_POST['data']))
{
$string = explode(':', $_POST['data']);
$string = $string[1]; //contains "this is what we want"
}
else
{
$string = NULL;
}

配列の例:

$arr = array('text' => $string); //example for use in the array.

可能であれば何かアイデアはありますか?

敬具 アレックス

4

3 に答える 3

2

これを試してください:

list(,$string) = isset($_POST['data']) 
               ? explode(':', $_POST['data']) 
               : array(null,null)
               ;
于 2013-02-20T00:04:30.563 に答える
1

このような IMO のマイクロ最適化により、コードが読み取れなく:なります。また、文字列に no が含まれているとUndefined index、その配列インデックスから読み取ろうとすると が発生します。

値が期待どおりであると 100% 確信できない場合は、確認する必要があります。サブターナリチェックを行うこともできますが、それだけの価値はありますか?

<?php
$data = 'sometextrighthereisgood:this is what we want';

if(isset($data)){
    $string = explode(':',$data);
    $string = isset($string[1]) ? $string[1] : NULL;
}else{
    $string = NULL;
}
echo $string; //this is what we want
?>
于 2013-02-20T00:12:42.817 に答える
0

コードに 1 つの問題があります。展開後、元の文字列に「:」がない場合、PHP は次の行に通知またはエラーを表示することがあります。

$string = $string[1]

$string[1]定義されていない可能性があります。したがって、割り当てる前に確認できます。

$string = (sizeof($string) >= 2 ? $string[1] : null);

他の解決策は、通知メッセージを無視することです:

$string =@ $string[1]

zerkmsが言ったように、これは醜い解決策であり、あまり制御できないため、悪い習慣です(エラー、通知などのレベルを無視するため)。だから、それを避けてください。

そして、if問題のために。私は個人的には、あなたが使用した方法を使用してもまったく問題ないと思います。よりクリーンで理解しやすいです。とにかく、三項を使用すると、次のようなものを使用できます。

$string = (isset($_POST['data']) ? explode(':', $_POST['data'], 2) : null);
$string = ($string != null && sizeof($string) >= 2 ? $string[1] : null);
于 2013-02-20T00:19:29.017 に答える