0

私は次の配列を持っています:

Array
(
[0] => Array
    (
        [Name] => first_data
        [building] => A
        [apt] => 16
    )

[1] => Array
    (
        [Name] => first_data
        [building] => B
        [apt] => 16
    )
[2] => Array
    (
        [Name] => second_data
        [building] => A
        [apt] => 17
    )

[3] => Array
    (
        [Name] => second_data
        [building] => B
        [apt] => 18
    )

そして、私はそれを次のように返す必要があります:

Array
(
[0] => Array
    (
        [Name] => first_data
        [A] => 16
        [B] => 16
    )
[1] => Array
    (
        [Name] => second_data
        [A] => 17
        [B] => 18
    )

何か案は?

ところで、最初の配列には何百ものエントリ (first_data だけでなく、second など...) があり、さらに A と B よりも多くのエントリがあります。

前もって感謝します。

4

1 に答える 1

1

まさにあなたが望むものではありませんが、代わりに名前で新しい配列にインデックスを付けると、これを非常に簡単に行うことができます。インデックス番号が何らかの ID である場合は、そのフィールドを作成するだけです。

foreach ( $oldarray as $index => $piece )
{
    $newarray[$piece['Name']] = array($piece['building'] => $piece['apt'])
}

これにより、

Array
(
['first_data'] => Array
    (
        ['A'] => 16,
        ['B'] => 16
    )
['second_data'] => Array
    (
        ['A'] => 17,
        ['B'] => 18
    )
)

同じ新しいエントリが 2 つあるため、2 番目のループに到達すると、単純に他の建物名が追加されます。このレイアウトで作業できる場合、ソリューションは非常に簡単です。示したとおりに正確に実行するには、さらに多くの手順が必要です。あなたが絶対に示した方法でそれを行う必要がある場合は、新しい配列をループして建物名を見つけ、正しい場所にキーを追加するための追加のコードが必要ですが、大量のデータがある場合、これは遅くなります.

私の意見では、私が提示した方法は、配列を見回すためのはるかに簡単な方法でもあります。「second_data」の A の適切な値を知りたい場合は、次のことができます

$newarray['second_data']['A']

あなたの配列レイアウトでは、「second_data」がどこにあるかわからないため、配列を検索するためにループが必要になります。

于 2013-06-28T17:00:45.517 に答える