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