数组 - 自定义foreach函数

时间:2012-03-02 00:39:09

标签: php arrays variables foreach

我有一个这种形式的数组:

$data = array(
        array(
            'id' => '1',
            'bar' => 'foo',
            'page' => 'front',
         ),
        array(
            'id' => 'bar',
            'bar' => 'foo',
            'page' => 'front',
         ),
        array(
            'id' => 'different,
            'bar' => 'bar',
            'page' => 'back',
         ),
        array(
            'id' => 'another',
            'title' => __("Custom CSS",'solidstyle_admin'), 
            'foo' => 'bar',
            'page' => 'back',
         ),
);

我想列出按页面分组并保存为变量的所有ID,所以如果上面的数组是输入,那么输出看起来就像这样:

$front = array('1','bar');
$back = array('different','another');
//$data['page'] = array($id1, $id2, (...));

我试图用foreach做到这一点,这就是它的开始:

function my_output() {
     foreach($data as $something) {
        $id = $something['id'];
        $page = $something['page'];

    }
   return $output;
}

我正在尝试多个foreach循环,我得到的最好结果是:

front = 1
front = bar
back = different
back = another 

但我完全不知道如何实现我想做的事情,我不想让任何人做我的工作,只是提示?请记住,我对PHP有点新鲜,而且我对数组知之甚少。

谢谢!

2 个答案:

答案 0 :(得分:1)

坚持循环理念并进行条件检查。

function my_output() { 
     $front = array();
     $back = array();

     foreach($data as $something) {
        $id = $something['id'];
        $page = $something['page'];
        if ($page === 'front') {
            $front[] = $id;
        } else if ($page === 'back') {
            $back[] = $id;
        }

    }

    // Not sure what you want to return here, but you could return an array of pages

   $output = array('front' => $front, 'back' => $back); 
   return $output;
}

这将返回类似于:

的内容
$output = array(
    'front' => array(
        0 => '1',
        1 => 'bar',  
    ),
    'back' => array(
        0 => 'something',
        1 => 'another',  
    )
)

修改:请注意,我的回答只会说明您在答案中列出的两个页面。如果你有更多页面,你也可以使用cbuckley的答案。

答案 1 :(得分:1)

听起来像你想要的那样:

$ids = array();

foreach ($data as $page) {
    $pageName = $page['page'];

    // create an empty array for your IDs
    if (!isset($ids[$pageName])) {
        $ids[$pageName] = array();
    }

    // add to the array of IDs
    $ids[$pageName][] = $page['id'];
}

var_dump($ids); // array('front' => array('1', 'bar'), ...