1

私はここで再投稿したり冗長になったりせず、まだphp配列を増やしていることを願っています。私は次のような多次元配列を持っています:

Array
(
[0] => stdClass Object
    (
        [field_name] => step_one
        [field_value] => A Message
    )

[1] => stdClass Object
    (
        [field_name] => message_color
        [field_value] => 
    )

[2] => stdClass Object
    (
        [field_name] => Submitted Login
        [field_value] => admin
    )

[3] => stdClass Object
    (
        [field_name] => Submitted From
        [field_value] => 127.0.0.1
    )

[4] => stdClass Object
    (
        [field_name] => step_one
        [field_value] => Another Message
    )

[5] => stdClass Object
    (
        [field_name] => message_color
        [field_value] => orange
    )

[6] => stdClass Object
    (
        [field_name] => Submitted Login
        [field_value] => admin
    )

[7] => stdClass Object
    (
        [field_name] => Submitted From
        [field_value] => 127.0.0.1
    )

[8] => stdClass Object
    (
        [field_name] => step_one
        [field_value] => some Other Idea
    )

[9] => stdClass Object
    (
        [field_name] => message_color
        [field_value] => pink
    )

[10] => stdClass Object
    (
        [field_name] => Submitted Login
        [field_value] => admin
    )

[11] => stdClass Object
    (
        [field_name] => Submitted From
        [field_value] => 127.0.0.1
    )

)そして私はそれをこのように読んで欲しい:

 Array( 
  Array [0] (
      [step_one] => Message
      [message_color] => 
      )
   Array [1] (
      [step_one] => Another Message
      [message_color] => orange

   )
   Array [2] (
      [step_one] => some other idea
      [message_color] => pink
   )

しかし、PHPでそこに到達する方法がわかりません。array_merge()とarray_combine()を試しましたが、どこにも行きません。どんな助けでも大歓迎です!

4

3 に答える 3

2

Here is a simple loop that will do it.

foreach($obj_array as $obj){
    $a_array[$obj->field_name]=$obj->field_value;
}
于 2012-09-18T00:26:38.393 に答える
1

ティムウィザーズソリューションまたは...

function gather($arr){
  return array($arr->field_name=>$arr->field_value);
}

$newArr = array_map('gather',$oldArr);

oldArrがオリジナルです!

于 2012-09-18T00:34:53.960 に答える
0
$reduce = function($input)
{
    $current = 0;
    return array_reduce($input, function($a, $b) use (&$current) {
        isset($a[$current][$b->field_name]) && $current++;
        $a[$current][$b->field_name] = $b->field_value;
        return $a;
    }, array());
};

print_r($reduce($input));

出力 (私はより小さなデータセットを持っています):

Array
(
    [0] => Array
        (
            [step_one] => A Message
            [message_color] => 
        )

    [1] => Array
        (
            [step_one] => Another Message
        )

)

微調整は、現在のインデックス ( $current) にキーが既に存在する場合に新しい要素を開始することです。

于 2012-09-18T01:47:11.420 に答える