我有以下数组:
Array
(
[0] => Array
(
[name] => bss2
[label] => front
[text] => just a testing item
)
[1] => Array
(
[name] => bss3
[label] => front top
[text] => front top testing item
)
[2] => Array
(
[name] => J334
[label] => back top
[text] => masking test back top
)
[3] => Array
(
[name] => J3366
[label] => back
[text] => back non mask test
)
)
我想完成的是检查标签是否 = 正面,然后将带有正面和背面相同的那些组合在一个大数组中,使其看起来像这样:
[approval] => Array(
[0] => Array(
[name] => front
[prev] => Array(
[0]=>Array(
[name] => bss2
)
[1]=>Array(
[name] => bss2
)
)
)
[1] => Array(
[name] => back
[prev] => Array(
[0]=>Array(
[name] => J334
)
[1]=>Array(
[name] => J3366
)
)
)
)
到目前为止,我没有太多东西并且被困住了,但这是我的代码
foreach($info as $data) {
if(strtolower(strpos($data['label'], "front") !==false)) {
} else {
}
}
Iv 还尝试使用效果很好的array_chunk,但如果有 3 个元素需要分组或 4 个元素会发生什么
array_chunk($info, 2);
或者,如果顺序不同,一个在前面,第二个在后面,会发生什么,然后它将前面和后面组合在一起。
任何帮助都非常感谢,谢谢。
这应该可以做到,假设唯一的选择是 front
和 back
。
$result = array(array('name' => 'front', 'prev' => array()),
array('name' => 'back', 'prev' => array()));
foreach ($info as $data) {
$i = (strpos(strtolower($data['label']), "front") !== false)
$result[$i]['prev'][] = array('name' => $data['name'];
}
$newinfo = array('approval' => $result;
我不清楚你在追求什么......如果只是front
和back
,或者如果您还想要top
和任何其他团体?
方法
无论如何,这里有一些选项应该涵盖大多数情况。
仅限正面和背面
这是最简单的,只会检查front
和back
。如果找到它们,那么它将根据需要以$newArray
front
和back
。
$newArray = array(array('front'), array('back')); //The new reformatted array
for($i = 0; $i < count($initialArray); $i++){
if(strpos($initialArray[$i]['label'], 'front') !== FALSE){//Check if group is front
$newArray[0]['prev'][] = array('name'=>$initialArray[$i]['name']); //Add to front
}
if(strpos($initialArray[$i]['label'], 'back') !== FALSE){//Check if group is back
$newArray[1]['prev'][] = array('name'=>$initialArray[$i]['name']); //Add to back
}
}
预定义组
这个有点复杂,将搜索在$groups
中找到的所有组。下面的代码仅显示front
和back
但您也可以添加,例如,top
或任何其他。
$groups = array('front', 'back'); //Groups to search for e.g. front, back, and top
$newArray = array(); //The new reformatted array
for($i = 0; $i < count($initialArray); $i++){
foreach($groups as $group){
if(strpos($initialArray[$i]['label'], $group) !== FALSE){//Check if group is in label
$groupKey = array_search($group, $groups); //Search for the key in $groups
$newArray[$groupKey]['prev'][] = array('name'=>$initialArray[$i]['name']); //Add to relevant group
}
}
}
自动化
这是最先进的代码,当数组中找到新组时,它将自动搜索和添加新组。它也是完全自动化的,所以你所要做的就是把它指向正确的阵列。
$groups = array(); //Index of groups like: top, front, and back
$newArray = array(); //The new reformatted array
for($i = 0; $i < count($initialArray); $i++){
$possibleGroups = explode(' ', strtolower($initialArray[$i]['label'])); //Get list of applicable groups
foreach($possibleGroups as $newGroup){
if(!in_array($newGroup, $groups)){ //If group doesn't already exist in $groups add it
$groups[] = $newGroup;
$newArray[] = array('name'=>$newGroup, 'prev'=>array());
}
$groupKey = array_search($newGroup, $groups); //Search for the key in $groups
$newArray[$groupKey]['prev'][] = array('name'=>$initialArray[$i]['name']); //Add to relevant group
}
}
测试阵列
上面的代码已经用下面的数组测试了...
$initialArray = array(
array(
'name' =>'bss2',
'label'=>'front',
'text' =>'sometihng...'
),
array(
'name' =>'bss3',
'label'=>'front top',
'text' =>'sometihng...'
),
array(
'name' =>'j334',
'label'=>'back top',
'text' =>'sometihng...'
),
array(
'name' =>'j3366',
'label'=>'back',
'text' =>'sometihng...'
)
);
示例输出
使用上面的测试数组输出第三种方法(自动)。
array (
0 =>
array (
'name' => 'front',
'prev' =>
array (
0 =>
array (
'name' => 'bss2',
),
1 =>
array (
'name' => 'bss3',
),
),
),
1 =>
array (
'name' => 'top',
'prev' =>
array (
0 =>
array (
'name' => 'bss3',
),
1 =>
array (
'name' => 'j334',
),
),
),
2 =>
array (
'name' => 'back',
'prev' =>
array (
0 =>
array (
'name' => 'j334',
),
1 =>
array (
'name' => 'j3366',
),
),
),
)