2011-08-14 11 views
1

私がしようとしているのは$namesの値がの値が空の場合は、$namesの配列の値がデフォルトの値になります。$urlsの値です。 (これは空の$_POST[]が空を返すという前提に基づいています。私が間違っていると誰かが私を修正してください)。単一の配列値を変更する簡単な方法はありますか?

は、ここに私のコードです:

$urls = array(1 => $_POST['url_1'], 2 => ['url_2'], 3 => $_POST['url_3'], 4 => $_POST['url_4'], 5 => $_POST['url_5']); 
$names = array(1 => $_POST['name_1'], 2 => ['name_2'], 3 => $_POST['name_3'], 4 => $_POST['name_4'], 5 => $_POST['name_5']); 

if(empty($names[1])) { $names[1] = $_POST['url_1']; } 
if(empty($names[2])) { $names[2] = $_POST['url_2']; } 
if(empty($names[3])) { $names[3] = $_POST['url_3']; } 
if(empty($names[4])) { $names[4] = $_POST['url_4']; } 
if(empty($names[5])) { $names[5] = $_POST['url_5']; } 

私はforeach()ループを使用して考えたが、私は本当に、個々の配列値などとして、それがどのように動作するか表示されません$names[1]は、空の場合$urls[1]に設定する必要があります。

アドバイス、コメント、またはその他の情報は非常に感謝される:)!

答えて

4
for ($i = 1; $i <= 5; $i++) { 
    $names[$i] = !empty($_POST['name_' . $i]) ? $_POST['name_' . $i] : $_POST['url_' . $i]; 
} 
+0

ありがとうございました:)。 '!empty($ _ POST ['name_'。$ i])? $ _POST ['name_'。 $ i]:$ _POST ['url_'。 $ i]; 'それは自分自身の中でif()'のように振る舞います。もしそうなら、「それは何ですか? – Avicinnian

+1

これは[三項演算子](http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary)と呼ばれています。 $ name [$ i] = $ _POST ['name_'。$ i];そうでなければ$ names [$ i] = $ _POST [ '$ url' '$ i]; ' –

+0

これで、空の場合と空でない場合の両方の配列値を定義するので、' $ names = array() 'を削除する必要があります。 :)、私は100%理解していることを確認したいだけです。 – Avicinnian

2
for ($i = 1; $i <= 5; $i++) { 
    if (empty($names[$i])) { 
     $names[$i] = $_POST['url_' . $i]; 
    } 
} 

しかし、あなたはまた$_POST['url_' . $i']が追加isset()チェックあなたのフィードバックのための

+0

感謝:)で、あまりにも存在しているかどうかを確認する必要があることに留意してください。この場合、 'for($ i = 1; $ i <= 5; $ i ++){ if(isset($ _ POST ['url_'。$ i])){continue; } else {break;} $ names [$ i] = $ _POST ['url_'] $ i]; if(空($ names [$ i])){ $ names [$ i] = $ _POST ['url_'。 $ i]; } } '$ names = array()'の値も設定しますか?また、 '['url_']に空白を入れなければならない理由もあります。 $ i] '? – Avicinnian

+0

@Pixelatron: 'if(空の($ names [$ i])&& isset($ _ POST ['url_'。$ i])){'はより良いimhoです。スペースは、コードをより読みやすくするために配置されています – zerkms

2
foreach ($names as $k=>$v){ 
if(empty($v)){ 
$names[$k] =$urls[$k]; 
// or $names[$k] = $_POST['url_' . $k']; 
} 
} 
+0

あなたの入力をありがとう:)。私はあなたが最初に 'foreach()'について言ってきたことを見ていますが、PHPベンチマークのリソース使用法に関する記事を読みました。foreach()は 'for()よりもかなり遅いようです。 '私は' for() 'を使って答えを受け入れました。なぜなら、最も効率的な関数を使う習慣に入るのが適切だからです。ありがとう:)。 – Avicinnian

+0

私は$ k => $ vの力でforeachを好んでいます。すべての配列が連続した数値範囲のキーを持つわけではありません。 –

0
$urls = array(1 => $_POST['url_1'], $_POST['url_2'], $_POST['url_3'], $_POST['url_4'], $_POST['url_5']); 
$names = array(1 => $_POST['name_1'], $_POST['name_2'], $_POST['name_3'], $_POST['name_4'], $_POST['name_5']); 

for ($c = 1; $c <= 5; $c++) 
{ 
    if(empty($names[$c])) 
    { 
    $postKey = 'url_'.$c; 
    $names[$c] = $_POST[$postKey]; 
    } 
} 
関連する問題