从数组中选择与php中另一个数组中的条件匹配的数据

时间:2014-06-19 11:54:52

标签: php sorting multidimensional-array

我有2个数组我想显示最终数组,因为$ displayArray中的数组元素只显示在$ firstArray

$firstArray = Array
(
[0] => Array
    (
        [Dis_id] => Dl-Dis1
        [Dis_Desc] => Discount
        [Dis_Per] => 7.500
        [Dis_val] => 26.25
    )

[1] => Array
    (
        [Dis_id] => Dl-Dis2
        [Dis_Desc] => Discount
        [Dis_Per] => 2.500
        [Dis_val] => 8.13
    )

)

$displayArray = Array
(
[0] => Array
    (
        [0] => Dis_id
        [1] => Dis_val
    )

)

我希望最终输出为

$resultArray = Array
(
[0] => Array
    (
        [Dis_id] => Dl-Dis1
        [Dis_val] => 26.25
    )

[1] => Array
    (
        [Dis_id] => Dl-Dis2
        [Dis_val] => 8.13
    )

)

$ firstArray和$ DisplayArray都是动态的,但$ displayArray应该是一个。

我不知道怎么办给我任何建议

1 个答案:

答案 0 :(得分:2)

首先,如果$displayArray永远不会有多个数组,答案非常简单。首先弹出内部数组,以获得您需要的实际键:

$displayArray = array_pop($displayArray);//get keys
$resultArray = array();//this is the output array
foreach ($firstArray as $data)
{
    $item = array();
    foreach ($displayArray as $key)
        $item[$key] = isset($data[$key]) ? $data[$key] : null;//make sure the key exists!
    $resultArray[] = $item;
}
var_dump($resultArray);

这可以满足您的需求 但是,如果$displayArray包含多个子数组,则需要一个额外的循环

$resultArray = array();
foreach ($displayArray as $k => $keys)
{
    $resultArray[$k] = array();//array for this particular sub-array
    foreach ($firstArray as $data)
    {
        $item = array();
        foreach ($keys as $key)
            $item[$key] = isset($data[$key]) ? $data[$key] : null;
        $resultArray[$k][] = $item;//add data-item
    }
}
var_dump($resultArray);

后一版本可以处理如下的显示数组:

$displayArray = array(
    array(
        'Dis_id',
        'Dis_val'
    ),
    array(
        'Dis_id',
        'Dis_desc'
    )
);

它会生成$resultArray,如下所示:

array(
    array(
        array(
            'Dis_id'  => 'foo',
            'Dis_val' => 123
        )
    ),
    array(
        array(
            'Dis_id'   => 'foo',
            'Dis_desc' => 'foobar'
        )
    )
)

完成工作