我有一个这种形式的数组:
$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有点新鲜,而且我对数组知之甚少。
谢谢!
答案 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'), ...