0

私には 2 つのオブジェクトがあり、ファインダー関数の動作方法 (2 回呼び出す必要があります... 1 つは構成キー、値、つまり非多言語のものを取得します。2 回目の呼び出しで多言語のものを取得します) は、次のようになります。

[config] => Array
    (
        [cfg] => Config_Model Object
            (
                [id] => 2
                [key] => system.default.main_color
                [value] => #FF7C11
                [deleted] => 0
            )

        [help] => Config_Model Object
            (
                [id] => 
                [key] => 
                [value] => 
                [id_config] => 2
                [name] => Hauptfarbe
                [help] => Die Hauptfarbe Ihres CIs. Der Adminbereich erscheint in dieser Farbe.
                [id_lang] => 1
            )

    )

この 2 つのオブジェクトを 1 つに結合したいと考えています。ものを取得するコードは次のようになります。

public static function get($key)
{
  $config['cfg'] = self::find(array('key' => $key), TRUE);
  $config['help'] = self::findInTable(array(
    'id_lang' => Language_Model::getDefaultLanguage(), 
    'id_config' => $config['cfg']->getId()
  ), self::dbTranslationTable, TRUE);
  return $config;
  // return (object) array_merge((array) $config['cfg'], (array) $config['help']);
}

コメント付きの return コマンドで、array_merge() を使用してみたことがわかります。それに関する問題は、[help] からの空の属性が [cfg] からの属性をオーバーライドするため、再び空になることです。

[config] => stdClass Object
    (
        [id] => 
        [key] => 
        [value] => 
        [deleted] => 0
        [id_config] => 2
        [name] => Hauptfarbe
        [help] => Die Hauptfarbe Ihres CIs. Der Adminbereich erscheint in dieser Farbe.
        [id_lang] => 1
    )

一方、次のようになります。

[config] => stdClass Object
    (
        [id] => 2
        [key] => system.defalult.main_color
        [value] => #FF7C11
        [deleted] => 0
        [id_config] => 2
        [name] => Hauptfarbe
        [help] => Die Hauptfarbe Ihres CIs. Der Adminbereich erscheint in dieser Farbe.
        [id_lang] => 1
    )

さらに詳しい情報が必要な場合は、お知らせください。

4

2 に答える 2

1

2 番目の配列から空の値を除外し、残ったものだけを最初の配列にマージする必要があります。

最も簡単な解決策は次のとおりです。

$config['help'] = array_filter((array) $config['help']);
return (object) array_merge((array) $config['cfg'], (array) $config['help']);

array_filter()これは、値が に評価されるかどうかをチェックするだけの のデフォルトの動作を使用しますfalse。これにより、空の文字列、NULL 値、または数字のゼロさえも削除されます。

より安全な解決策は、実際には次のように空の文字列をチェックします。

$config['help'] = array_filter((array) $config['help'], function($val) {
    return (string) $val != '';
});
return (object) array_merge((array) $config['cfg'], (array) $config['help']);
于 2013-07-24T06:16:17.347 に答える
0

愚かな私...質問する前に、本当にすべてを試してみる必要があります。スペースを不必要に使用して申し訳ありません... 変数を array_merge() に渡す順序は重要です! ひっくり返してみましたが、今はこんな感じです。

return (object) array_merge((array) $config['help'], (array) $config['cfg']);

そしてTA-DA!配列は私が望んでいたように見えます。

于 2013-07-24T06:16:13.973 に答える