PHP разделить массив на основе соответствующих значений

В 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"]
]
];

-1

Решение

Вы можете сгруппировать массив, пройдя его. Попробуйте следующий код:

<?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);

DEMO

0

Другие решения

Это делает то, что вам нужно, используя array_reduce,

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

$data = array_reduce($data, function ($data, $value) {
if (! array_key_exists($value[0], $data)) {
$data[$value[0]] = [];
}

$data[$value[0]][] = $value;
return $data;
}, []);
0

Используйте этот код

$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);
0

попробуй этот код

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

$output = array();

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

foreach($output as $data){
print_r(json_encode($data));echo "\n";
}

смотрите вывод здесь:выход

0

Вы можете проверить это, который сначала форматирует ваш код, а затем возвращает массив ключей соответствия. я использовал json_encode для формата массива результата как ваше требование

<?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);
?>

и конечный результат:

введите описание изображения здесь

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector