按键值匹配多维数组,保留其他值

时间:2014-01-24 12:47:46

标签: php arrays

我有一个包含以下格式数据的数组:

$myArray = array(
    array(
            'id' = 1,
            'title' = 'the first entry',
            'data' = 'additional data'
         ),
    array(
            'id' = 2,
            'title' = 'the third entry',
            'data' = 'some more data'
         ),
    array(
            'id' = 3,
            'title' = 'the second entry',
            'data' = 'other important stuff'
         )
    );

(一个包含大约12个子数组的数组)。根据title属性,需要将此数据拆分为两行,以便在我的页面上显示。我知道第一行我想要什么标题,第二排哪些标题。所以我有另一个这样的数组:

 $firstRow = array('the first entry', 'the second entry');
 $secondRow = array('the third entry');

所以我需要做的就是将这3个数组$myArray, $firstRow, $secondRow放入一个函数中,该函数将输出一个新的有序数组,该数组保留其他属性(iddata个键我的例子)如下:

$newArray = array(
    'firstRow' => array(
                      array(
                         'id' = 1,
                         'title' = 'the first entry',
                         'data' = 'additional data'
                            ),
                      array(
                         'id' = 2,
                         'title' = 'the second entry',
                         'data' = 'some more data'
                           )
                       ),
    'secondRow' => array(
                       array(
                          'id' = 3,
                          'title' = 'the third entry',
                          'data' = 'other important stuff'
                            )
                        )
                  );

我有一些想法,我知道有各种各样的函数,比如array_intersect(),但我不确定哪个最好用?希望有人能够快速简便地解决这个问题。感谢。

1 个答案:

答案 0 :(得分:0)

使用foreach循环titles数组,并在循环内创建一个新数组,具体取决于标题值:

function groupTitlesintoArrays($myArray, $firstRow, $secondRow) {
    $result = array();
    foreach ($myArray as $innerArray) {
        foreach ($firstRow as $row) {
            if ($row == $innerArray['title']) {
                $result['firstRow'][] = $innerArray;
            }
        }
        foreach ($secondRow as $row) {
            if ($row == $innerArray['title']) {
                $result['secondRow'][] = $innerArray;
            }
        }
    }
    return $result;
}

Demo