PHP基于匹配值划分数组

PHP基于匹配值划分数组,php,arrays,divide,Php,Arrays,Divide,在PHP中,是否可以根据数组的匹配值分割或拆分数组?这些数组值将被动态推送到数组中。它们是单个mysql数据库查询的结果。长话短说,我通过将查询放入for循环并进行一些简陋的PHP编码,成功地完成了这项任务,但这种方法似乎效率很低,而且很容易被打破。下面的数组是我试图分割的数组的一个示例: $returnedData = [ ["1003", "correct"], ["1003", "incorrect"], ["1003", "correct"], ["100

在PHP中,是否可以根据数组的匹配值分割或拆分数组?这些数组值将被动态推送到数组中。它们是单个mysql数据库查询的结果。长话短说,我通过将查询放入for循环并进行一些简陋的PHP编码,成功地完成了这项任务,但这种方法似乎效率很低,而且很容易被打破。下面的数组是我试图分割的数组的一个示例:

$returnedData = [
    ["1003", "correct"],
    ["1003", "incorrect"],
    ["1003", "correct"],
    ["1004", "correct"],
    ["1004", "incorrect"],
    ["1004", "incorrect"],
    ["1005", "incorrect"],
    ["1005", "correct"],
    ["1005", "incorrect"]
  ];
这个数组可以用PHP像这样拆分吗

  $returnedData = [
    [
      ["1003", "correct"],
      ["1003", "incorrect"],
      ["1003", "correct"]
    ],
    [
      ["1004", "correct"],
      ["1004", "incorrect"],
      ["1004", "incorrect"]
    ],
    [
      ["1005", "incorrect"],
      ["1005", "correct"],
      ["1005", "incorrect"]
    ]
  ];

您可以通过遍历数组对其进行分组。请尝试以下代码:

<?php

$returnedData = [
    ["1003", "correct"],
    ["1003", "incorrect"],
    ["1003", "correct"],
    ["1004", "correct"],
    ["1004", "incorrect"],
    ["1004", "incorrect"],
    ["1005", "incorrect"],
    ["1005", "correct"],
    ["1005", "incorrect"]
  ];

$grouped_array = array();
foreach($returnedData as $data)
{
    if(isset($grouped_array[$data[0]]))
        array_push($grouped_array[$data[0]],$data);
    else
        $grouped_array[$data[0]] = array($data);
}
$grouped_array = array_values($grouped_array);
print_r($grouped_array);
使用此代码

$returnedData2=$log=array();

foreach($returnedData as $i=>$subAry){
    $ind=$subAry[0];
    if(isset($log[$ind])){
       $ind2= $log[$ind];
       array_push($returnedData2[$ind2], $subAry);

    }else{
       $log[$ind]=$i;
       $returnedData2[$i]=array();
       array_push($returnedData2[$i], $subAry);

    }

}
echo '<pre>';
print_r($returnedData2);
$returneddata=$log=array();
foreach($i=>$subAry返回的数据){
$ind=$subAry[0];
如果(isset($log[$ind])){
$ind2=$log[$ind];
阵列推送($returnedData2[$ind2],$subAry);
}否则{
$log[$ind]=$i;
$returnedData2[$i]=array();
阵列推送($returnedData2[$i],$subAry);
}
}
回声';
打印(返回数据2);
试试这段代码

<?php

$data = [
    ["1003", "correct"],
    ["1003", "incorrect"],
    ["1003", "correct"],
    ["1004", "correct"],
    ["1004", "incorrect"],
    ["1004", "incorrect"],
    ["1005", "incorrect"],
    ["1005", "correct"],
    ["1005", "incorrect"]
];

$format_data = array();

foreach ($data as $value) {
    if (isset($format_data[$value[0]])) {
        array_push($format_data[$value[0]], $value);
    } else {
        $format_data[$value[0]] = array($value);
    }
}
$format_array = array_values($format_data);

foreach ($format_array as $data) {
    $result[] = json_encode($data);
}
echo "<pre>";
print_r($result);
?>

您可以检查此项,首先格式化代码,然后返回匹配键数组。根据您的要求,我使用了json\u encode格式数组结果


最终输出为:


到目前为止,您尝试了什么?您可能会发现
array\u filter
array\u reduce
很有帮助。我尝试了json\u encode/json\u decode方法,但无法使其工作。我的大多数尝试都产生了一个PHP对象,它的键名有数字,尽管我做了很多研究,但还是无法访问它。我尝试了比我在这里列出的更多的变体,但在遇到了许多死胡同之后,我决定问一下,看这是否可行。顺便说一句,非常感谢您的回复。是的,JSON函数没有多大用处。我在下面介绍了一个使用
array\u reduce
的示例,还有一些人建议使用
foreach
循环。你选吧,成功了!非常感谢你抽出时间来B.德赛!再次感谢B·德赛!我欠你的!谢谢大家的帮助!这个问题让我的进度停滞了好几天,最后我找到了一个可行的解决方案。我真是太感谢你们了@如果答案有帮助,则向上投票并将其标记为“接受答案”。
<?php

$data = [
    ["1003", "correct"],
    ["1003", "incorrect"],
    ["1003", "correct"],
    ["1004", "correct"],
    ["1004", "incorrect"],
    ["1004", "incorrect"],
    ["1005", "incorrect"],
    ["1005", "correct"],
    ["1005", "incorrect"]
];

$format_data = array();

foreach ($data as $value) {
    if (isset($format_data[$value[0]])) {
        array_push($format_data[$value[0]], $value);
    } else {
        $format_data[$value[0]] = array($value);
    }
}
$format_array = array_values($format_data);

foreach ($format_array as $data) {
    $result[] = json_encode($data);
}
echo "<pre>";
print_r($result);
?>