2011-11-10 6 views
2

配列キーを組み合わせて、結合されたキー値を使って新しいキーを作成することはできますか?PHP配列キーの値を(同じ配列内で)組み合わせて新しいキー値を作成する

私は(ちょうど私がコードに何を意味するかを示す、明らかにこのコードは動作しません)、このような何かを行うことが可能である場合だけで不思議、それらを結合する関数を作成するために求めていないよ:

<?php 
$box = array(
    "Width" => 10, 
    "Height" => 20, 
    "Total" => ($box["Width"] + $box["Height"]), 
); 
echo $box["Total"]; // would show up as 30 
?> 

答えて

3

いいえ、配列の定義中ではありません。 array(...)が最初に評価されており、その結果に=$boxが割り当てられています。評価が終了する前に$boxを参照することはできません。

これを2つのステップで実行するか、メソッドや(オートマジック)ゲッターを使用してそのような魔法を実行できるカスタムクラスを作成する必要があります。

+0

を書くことができます。この回答はOPに明確かつ簡潔に回答した。 –

+0

答えてくれてありがとう、私は頼んだものを探したが見つけられなかった。しかし、あなたは私のために清算されたものに答えます、ありがとう。 – Saucy

2

あなたは2つのステップが必要です。簡単な答えはノーである

$box = array(
    "Width" => 10, 
    "Height" => 20, 
); 
$box["Total"] = $box["Width"] + $box["Height"]; 
echo $box["Total"]; 
+1

私はコードが気に入っていますが、 '$ box'に代入される前にキーと値のペアが解析されているという説明は、私の目でこの答えをもう少し完成させるでしょう。 –

+0

これをdecezeの答えと組み合わせてください。 – mseancole

1

を。

これを詳しく説明します。これは、正確にはクラスの目的です。あなたは非常に単純にやろうとしている何ができることに注意してください:もちろん$box

<?php 
class Box extends ArrayObject 
{ 
    public function offsetGet($key) 
    { 
    return $key == 'Total' ? $this['Width'] + $this['Height'] : parent::offsetGet($key); 
    } 
} 

$box = new Box(array(
    'Width' => 10, 
    'Height' => 20 
)); 

echo $box['Total'],"\n"; 

は、この例では本当の配列ではなく、そのように、直接配列関数で使用することはできません。 ArrayObjectのドキュメントを参照してください。

+0

これは他の回答と比べてどのように単純ですか? – mseancole

+1

@showerhead:これはもっと簡単です: '$ w = 10; $ h = 20; $ total = $ w + $ h; 'ですが、配列を使用すべきではありません。私の答えは概念を説明するだけです。クラスを使用して派生した値を計算することは必ずしも多くのコードを必要とするとは限りません。サイト全体にボックスを作成している場合、それらを処理するクラスを設定することは、一度だけ行う必要があるため、エラーが発生しにくくなります。実際には、私は実際にはこのために 'ArrayObject'を使用しません。標準的なクラスが行います。もちろん、これが単なる一度だけの手順であれば、xdazzが提案したことを正確に実行できます。 – Matthew

-1

すでに10と20を持っているので、あなたは、他の解決策が掲載されている理由がわからない、笑

<?php 
$box = array(
    "Width" => 10, 
    "Height" => 20, 
    "Total" => 10 + 30, 
); 
echo $box["Total"]; // would show up as 30 
+0

値を複数回定義するためのコーディングスタイルが正しくありません。幅10インチと合計10インチは関連していますか?私がコードを書いていないかどうかは分かりません。高さが20、次に30となったときには非常に分かりません。30は何ですか?あなたのコメントも間違っています。 10 + 30は40と表示されます。 –

関連する問題