2010-06-17 36 views
0

我现在有一个数组,从一个数据库中创建的,其中的一个例子如下所示:(PHP)从一种格式转换数组的数组到另一个

Array(
    [0] => Array (
     objectid => 2, 
     name => title, 
     value => apple 
    ), 

    [1] => Array (
     objectid => 2, 
     name => colour, 
     value => red 
    ), 

    [2] => Array (
     objectid => 3, 
     name => title, 
     value => pear 
    ), 

    [3] => Array (
     objectid => 3, 
     name => colour, 
     value => green 
    ) 
) 

我想做的是按他们的OBJECTID阵列中的所有项目,并转换成“名称”值到键和“值”值到一个关联数组的值....象下面这样:

Array (
    [0] => Array (
     objectid => 2, 
     title => apple, 
     colour => red 
    ), 

    [1] => Array (
     objectid => 3, 
     title => pear, 
     colour => green 
    ) 
) 

我已经尝试了几件事情,但没有真正得到任何地方..任何想法? 在此先感谢

回答

0

这应该与您当前的设置工作,并应能处理尽可能多的键值对能:

<?php 

$results = array(
    array('objectid' => 2, 'name' => 'title', 'value' => 'apple'), 
    array('objectid' => 2, 'name' => 'color', 'value' => 'red'), 
    array('objectid' => 3, 'name' => 'title', 'value' => 'pear'), 
    array('objectid' => 3, 'name' => 'color', 'value' => 'green')); 

$final = array(); 
foreach ($results as $result) { 
    $final[$result['objectid']]['objectid'] = $result['objectid']; 
    $final[$result['objectid']][$result['name']] = $result['value']; 
} 

print_r($final); 
0

这将是更容易有数组键与对象ID对应,这样你可以通过你现有的数组迭代,并添加键值对每个对象,像这样:

$newArray = array(); 
foreach ($results as $result) { 

    if (!array_key_exists($result['objectid'], $newArray)) { 
     $newArray[$result['objectid'] = array(); 
    } 

    foreach ($result as $key => $value) { 
     $newArray[$result['objectid'][$key] = $value; 
    } 
} 
0

彼得的方法是非常有效的,我只是想我会表现出同样的事情,一个较短的版本(在评论不能这样做)

foreach($array as $obj) { 
    if(!isset($objects[$obj['objectid']])) 
     $objects[$obj['objectid']]['objectid'] = $obj['objectid']; 

    $objects[$obj['objectid']][$obj['name']] = $obj['value']; 
} 
相关问题