2012-12-16 91 views
0

由于某种原因,我正在为此付出努力。我有2个数组。第一个是所谓的colsArray标准阵列,看起来像这样:阵列中的PHP值来自其他阵列中的密钥

Array 
(
    [0] => fName 
    [1] => lName 
    [2] => city 
) 

二是多维数组称为query_data,看起来像这样:

Array 
(
    [0] => Array 
    (
     [recordID] => xxx 
     [fName] => xxx 
     [lName] => xxx 
     [address1] => xxx 
     [city] => xx 
     [zip] => xxx 
     [vin] => xxx 
    ) 

[1] => Array 
    (
     [recordID] => xxx 
     [fName] => xxx 
     [lName] => xxx 
     [address1] => xxx 
     [city] => xxx 
     [zip] => xxx 
     [vin] => xxx 
    ) 

[2] => Array 
    (
     [recordID] => xxx 
     [fName] => xxx 
     [lName] => xxx 
     [address1] => xxx 
     [city] => xxx 
     [zip] => xxx 
     [vin] => xxx 
    ) 

[3] => Array 
    (
     [recordID] => xxx 
     [fName] => xxx 
     [lName] => xxx 
     [address1] => xxx 
     [city] => xxx 
     [zip] => xxx 
     [vin] => xxx 
    ) 

我只需要使用这两个数组创建一个新数组,该数组包含来自query_data数组中的所有数据,其中的键位于第一个数组colsArray中。新的阵列看起来像这样:

Array 
(
    [0] => Array 
    (

     [fName] => xxx 
     [lName] => xxx 
     [city] => xx 

    ) 

[1] => Array 
    (
     [fName] => xxx 
     [lName] => xxx 
     [city] => xx 
    ) 

[2] => Array 
    (
     [fName] => xxx 
     [lName] => xxx 
     [city] => xx 
    ) 

[3] => Array 
    (
     [fName] => xxx 
     [lName] => xxx 
     [city] => xx 
    ) 
) 

对此的任何帮助将是伟大的。

谢谢!

+0

不知道你为什么没有选择答案,但看看我的。 –

回答

8

PHP提供了一个variety of array functions,和你平时逃脱只是结合了一堆那些:

$keys = array_flip($colsArray); 
$new_data = array(); 

foreach($query_data as $key => $data) { 
    $new_data[$key] = array_intersect_key($data, $keys); 
} 

或者,更实用的风格,但更多的内存密集型:

$new_data = array_map(
    'array_intersect_key', // or just array_intersect_key in newer PHP versions 
    $query_data, 
    array_pad(array(), count($query_data), array_flip($colsArray)) 
); 
+0

这只是美丽的。 –

+1

谢谢@Felix。这是完美的。我试图使用类似的东西,但几乎没有光滑,它不工作。再次感谢 – Sequenzia

1
$finalarr = []; 
foreach ($query_data as $data) { 
    $arr = []; 
    foreach ($colsArray as $key){ 
     $arr[$key] = $data[$key]; 
    } 
    $finalarr[] = $arr; 
} 

用于创建阵列的[]表示法是新的,因此您可能必须改用array()