私はPHPで配列でツリー構造を形成していますが、これらのツリーは次の構造を持っています。ネストされた配列の合計を取得する
array(5) {
["guid"]=>
string(32) "bfd08465daebc6a624f81fb38fdcb357"
["name"]=>
string(7) "Activos"
["parent_guid"]=>
string(32) "3caed17eb39d20aa9d409f2e61d457ff"
["suma"]=>
NULL
["children"]=>
array(1) {
[0]=>
array(5) {
["guid"]=>
string(32) "c0227d82bf3926d0517a0cffce66be31"
["name"]=>
string(14) "Current Assets"
["parent_guid"]=>
string(32) "bfd08465daebc6a624f81fb38fdcb357"
["suma"]=>
NULL
["children"]=>
array(3) {
[0]=>
array(5) {
["guid"]=>
string(32) "c7bc90c45a5319a00f8a64c7ae1a5ca9"
["name"]=>
string(16) "Cuenta de ahorro"
["parent_guid"]=>
string(32) "c0227d82bf3926d0517a0cffce66be31"
["suma"]=>
string(11) "111035.3800"
["children"]=>
array(0) {
}
}
[1]=>
array(5) {
["guid"]=>
string(32) "72a3ed3467cfd24671197ad7d7f9bb40"
["name"]=>
string(17) "Cuenta de cheques"
["parent_guid"]=>
string(32) "c0227d82bf3926d0517a0cffce66be31"
["suma"]=>
string(6) "0.0000"
["children"]=>
array(0) {
}
}
ノードに子がある場合、インデックス「children」は値を含む入れ子配列になります。ここでの質問は、「guid」を与えられたすべての子どものインデックス「suma」のすべての値をどのように合計するかです。
たとえば、guid c7bc90c45a5319a00f8a64c7ae1a5ca9を指定すると、このサブツリーには子がないため、この関数は111035.3800を返す必要があります。しかし、c0227d82bf3926d0517a0cffce66be31では、関数は、指定されたguidとその子のインデックス "suma"の値であるNull + 111035.3800 + 0.0000を加算する必要があります。ノードに「n」のネストされた子がある場合、関数はすべての子を反復し、インデックス "suma"の値を合計する必要があります。
guid値を指定してサブツリーを返す再帰関数が既にありますが、その和の計算方法はわかりません。
function getChildrenAccounts($array, $parent_guid)
{
if(!is_array($array))
return null;
if(isset($array['guid']) && $array['guid'] == $parent_guid)
return $array['children'];
foreach ($array as $item) {
$return = $this->getChildrenAccounts($item, $parent_guid);
if (!is_null($return))
return $return;
}
return null;
}
すべてのヘルプは、あなたの問題は、あなたの関数定義であるおかげ
ありがとう、ちょうどレコードのために、インデックス "suma"のNULL値を避けるためにツリーを呼び出すクエリでmySQL関数 'COALESCE'を使用しなければなりませんでした。 –