0
で一つだけの要素が含まれているとき、私はそれだけで一つの要素と親配列のキーが数値で含まれている場合は、親に子配列データを移動しようとしている親にフラット化。私はそれを完全に平らにしたくありません。私は配列の構造を保持したい。子配列の中には、上位のものを除いて数字キーは必要ありません。PHPは、サブ配列は数値インデックス
私の入力データ:
[8] => Array
(
[any] => Array
(
[0] => Array
(
[all] => Array
(
[0] => stdClass Object
(
[f] => test1
)
[1] => Array
(
[0] => Array
(
[any] => Array
(
[0] => Array
(
[all] => Array
(
[0] => stdClass Object
(
[f] => test2
)
[1] => stdClass Object
(
[f] => test3
)
)
)
)
)
)
)
)
)
)
)
私の理想の出力:
[8] => Array
(
[any] => Array
(
[all] => Array
(
[0] => stdClass Object
(
[f] => test1
)
[any] => Array
(
[all] => Array
(
[0] => stdClass Object
(
[f] => test2
)
[1] => stdClass Object
(
[f] => test3
)
)
)
)
)
)
)
私は多次元配列で動作するようにしようとしています。 次の機能を試しました。
次の出力があります。私はまた、追加のelseif条件を追加しようとした条件「の子配列の どれも数字キーを持つべきではない」
[8] => Array
(
[any] => Array
(
[all] => Array
(
[0] => stdClass Object
(
[f] => test
)
[1] => Array
(
[any] => Array
(
[all] => Array
(
[0] => stdClass Object
(
[f] => test
)
[1] => stdClass Object
(
[f] => test
)
)
)
)
)
)
)
)
を満たすために、それを修正することができませんでし除きすべてがよさそうだが、動作していないよう...
elseif((is_numeric($k) && (key($v) == 'all' || key($v) == 'any') && count($v) == 1)){ // if all or any are under numeric index array , remove numeric index array and move a level up
$arr[key($v)] = reset($v);
}
IS_NUMERICは偉大な動作するかどうかチェックした後
reset()
を使用することです。ありがとうございました。 – subraこんにちはアーウィンは、私はそれは素晴らしい仕事を、あなたの提案を試してみました。私は数字キーのない子配列を持っていたかったのです。あなたは何か提案があるのだろうか?私は例とコード – subra
で私の質問を更新しました。一番上のキーを英数字にして、追加のelseif条件を追加しました。関数flattenKeyZero(&$のARR){foreachの($ ARRとして$ K =>&$ V){IF(IS_ARRAY($ V)){IF((カウント($ V)== 1 && IS_NUMERIC(キー($ V) )))){$ arr [$ k] =リセット($ v); } ELSEIF((IS_NUMERIC($ K)&&カウント($ V)== 1)){$のARR [キー($ V)] =リセット($ V)。 解除($ [$ k]をARR)。他 } { の$ this - > flattenKeyZero($ V)。 } } } } – subra