重新排列多维php数组
我需要重新安排一个php多维数组,以便“匹配”来自不同数组的对应值 这是我重复的例子重新排列多维php数组,php,multidimensional-array,Php,Multidimensional Array,我需要重新安排一个php多维数组,以便“匹配”来自不同数组的对应值 这是我重复的例子 <?php // my original array $myar= array( array('A'=>'xxx','B'=>1), array('A'=>'yyy','B'=>2), array('A'=>'xxx','B'=>3),
<?php
// my original array
$myar= array(
array('A'=>'xxx','B'=>1),
array('A'=>'yyy','B'=>2),
array('A'=>'xxx','B'=>3),
array('A'=>'yyy','B'=>4)
);
print_r($myar);
// my desired result, new array
$myar_new= array(
array('xxx'=>1,'yyy'=>2),
array('xxx'=>3,'yyy'=>4)
);
print_r($myar_new);
?>
有什么帮助吗
谢谢如果我正确理解了您的逻辑,那么这个函数就是您所需要的 编辑
function strange_reformat($srcArray) {
$newArray = [];
$c = count($srcArray);
$i = 0;
$groupStart = null;
$collect = [];
while($i < $c) {
$row = current($srcArray[$i]);
if ($row == $groupStart) {
$newArray[] = $collect;
$collect = [];
}
$tmp = array_values($srcArray[$i]);
$collect[] = [$tmp[0] => $tmp[1]];
if ($groupStart === null) $groupStart = $row;
$i++;
}
$newArray[] = $collect;
return $newArray;
}
print_r(strange_reformat($myar));
是的,就是这样
但是现在我需要概括一下,请考虑这个案例
$myar= array(
array('A'=>'xxx','B'=>1),
array('A'=>'yyy','B'=>2),
array('A'=>'zzz','B'=>5),
array('A'=>'xxx','B'=>3),
array('A'=>'yyy','B'=>4),
array('A'=>'zzz','B'=>6)
);
function strange_reformat($srcArray) {
$newArray = [];
$c = count($srcArray);
for ($i=0; $i<$c; $i+=3) {
$first = array_values($srcArray[$i]);
$second = array_values($srcArray[$i+1]);
$third = array_values($srcArray[$i+2]);
$newArray[] = [$first[0]=>$first[1], $second[0]=>$second[1], $third[0]=>$third[1]];
}
return $newArray;
}
print_r(strange_reformat($myar));
这种分组背后的逻辑是什么?为什么1和2在一起,而1和4不在一起?您需要向我们展示您自己尝试了什么来解决此问题,还请包括您在执行此操作时遇到的任何错误。如果其中一项是数组“A”=>“zzz”,“B”=>1?我想选择键“B”中的所有值,对应于上述函数中键“A”中的相同值$I可以是任意数量的唯一大小写值,所以x/y/z可以是任意数量的值?重复两次或更多?新的数组值应在50%之后开始?或者重复模式中是否可能存在间隙?或者,分组是在第一行再次出现时开始的?您必须明确定义源数据是的,x/y/z可以是任意数量的值,并且它们至少重复两次;分组应该在模式的第一行再次出现时开始,感谢您的所有努力