#multidimensional-array #php-7 #sub-array
#многомерный-массив #php-7 #подмассив
Вопрос:
Я пытаюсь взять такой массив, как этот:
Array
(
[0] => Array
(
[model_id] => 1
[member_id] => 25
[comment_text] => Me feel good about this
[created_on] => 2020-12-26 10:02:58.205335
[comment_id] => 89dab457-cff2-4ae4-9251-48e4f9c7bc63
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => zeus_the_god
[comment_parent] => d0e92ab1-5867-4ca4-952e-8ca4424982ea
[original_date] => 2020-12-25 15:09:28.403925
[cmt_names] =>
[row_likes] => 0
[date_check] => 2020-12-25 15:09:28.403925
)
[1] => Array
(
[model_id] => 1
[member_id] => 25
[comment_text] => Oh YES YES YES
[created_on] => 2020-12-25 15:09:28.403925
[comment_id] => d0e92ab1-5867-4ca4-952e-8ca4424982ea
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => zeus_the_god
[comment_parent] =>
[original_date] =>
[cmt_names] => dean.manner
[row_likes] => 1
[date_check] => 2020-12-25 15:09:28.403925
)
[2] => Array
(
[model_id] => 1
[member_id] => 25
[comment_text] => @spiffy_kid - We can do that
[created_on] => 2020-12-25 15:17:53.572503
[comment_id] => 395cac7c-ea28-491b-92c7-3d0b8444a78f
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => zeus_the_god
[comment_parent] => 7b89e577-1e8f-4c24-bb83-48aa0f9e3a25
[original_date] => 2020-12-25 15:12:15.54293
[cmt_names] =>
[row_likes] => 0
[date_check] => 2020-12-25 15:12:15.54293
)
[3] => Array
(
[model_id] => 1
[member_id] => 17
[comment_text] => Let's do this fast and quick
[created_on] => 2020-12-25 15:16:59.806941
[comment_id] => 42c5a5f0-ac3e-4c28-b633-37e014d27977
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => spiffy_friend
[comment_parent] => 7b89e577-1e8f-4c24-bb83-48aa0f9e3a25
[original_date] => 2020-12-25 15:12:15.54293
[cmt_names] =>
[row_likes] => 0
[date_check] => 2020-12-25 15:12:15.54293
)
[4] => Array
(
[model_id] => 1
[member_id] => 18
[comment_text] => How you doing?
[created_on] => 2020-12-25 15:12:15.54293
[comment_id] => 7b89e577-1e8f-4c24-bb83-48aa0f9e3a25
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => dean.manner
[comment_parent] =>
[original_date] =>
[cmt_names] =>
[row_likes] => 0
[date_check] => 2020-12-25 15:12:15.54293
)
)
и сделать так, чтобы это выглядело вот так:
Array (
[0] => Array (
[model_id] => 1
[member_id] => 25
[comment_text] => Oh YES YES YES
[created_on] => 2020-12-25 15:09:28.403925
[comment_id] => d0e92ab1-5867-4ca4-952e-8ca4424982ea
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => zeus_the_god
[comment_parent] =>
[original_date] =>
[cmt_names] => dean.manner
[row_likes] => 1
[date_check] => 2020-12-25 15:09:28.403925
[cmt_reply] => Array (
[0] => Array (
[model_id] => 1
[member_id] => 25
[comment_text] => Me feel good about this
[created_on] => 2020-12-26 10:02:58.205335
[comment_id] => 89dab457-cff2-4ae4-9251-48e4f9c7bc63
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => zeus_the_god
[comment_parent] => d0e92ab1-5867-4ca4-952e-8ca4424982ea
[original_date] => 2020-12-25 15:09:28.403925
[cmt_names] =>
[row_likes] => 0
[date_check] => 2020-12-25 15:09:28.403925
)
)
)
[1] => Array (
[model_id] => 1
[member_id] => 18
[comment_text] => How you doing?
[created_on] => 2020-12-25 15:12:15.54293
[comment_id] => 7b89e577-1e8f-4c24-bb83-48aa0f9e3a25
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => dean.manner
[comment_parent] =>
[original_date] =>
[cmt_names] =>
[row_likes] => 0
[date_check] => 2020-12-25 15:12:15.54293
[cmt_reply] => Array (
[0] => Array (
[model_id] => 1
[member_id] => 17
[comment_text] => Let\'s do this fast and quick
[created_on] => 2020-12-25 15:16:59.806941
[comment_id] => 42c5a5f0-ac3e-4c28-b633-37e014d27977
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => spiffy_friend
[comment_parent] => 7b89e577-1e8f-4c24-bb83-48aa0f9e3a25
[original_date] => 2020-12-25 15:12:15.54293
[cmt_names] =>
[row_likes] => 0
[date_check] => 2020-12-25 15:12:15.54293
)
[1] => Array (
[model_id] => 1
[member_id] => 25
[comment_text] => @spiffy_kid - We can do that
[created_on] => 2020-12-25 15:17:53.572503
[comment_id] => 395cac7c-ea28-491b-92c7-3d0b8444a78f
[event_id] => 3112f8ff-6119-48c4-810c-594585b5dc63
[model_name] => STL_friend
[member_name] => zeus_the_god
[comment_parent] => 7b89e577-1e8f-4c24-bb83-48aa0f9e3a25
[original_date] => 2020-12-25 15:12:15.54293
[cmt_names] =>
[row_likes] => 0
[date_check] => 2020-12-25 15:12:15.54293
)
)
)
)
Но я не могу этого сделать. Я очень близок к этому, но этого просто нет.
Функция должна идентифицировать все элементы массива, где значение [comment_parent]
=== [comment_id]
значение в другом элементе. Если они совпадают, то элемент with [comment_parent]
становится подмассивом того, у которого есть совпадение [comment_id]
.
Но я не могу этого сделать. Я очень близок к этому, но этого просто нет.
Попытка первая:
foreach ($qrtn as $key => $val){
$cmt = $val['comment_id'];
$prt = $val['comment_parent'];
foreach ($qrtn as $keyed => $value) {
$cmt2 = $value['comment_id'];
$prt2 = $value['comment_parent'];
echo "$cmt === $prt2n";
if ($cmt === $prt2) {
$qrtn[$key]['subcmt'-1] = $value;
unset($qrtn[$key]);
}
}
}
попытка два:
$arrCmts = array_diff_assoc(array_column($qrtn, 'comment_id'), array_column($qrtn, 'comment_parent'));
$arrCmt1 = [];
array_walk($arrCmts, function ($itemed, $keyed) use (amp;$qrtn, amp;$arrCmt1) {
foreach ($qrtn as $key1 => $val) {
$cmtItm2 = $val['comment_id'];
$prtItm2 = $val['comment_parent'];
if ($prtItm2 === $itemed) {
$qrtn[$key1-1]['subcmts'] = $val;
unset($qrtn[$key1]);
}
}
});
Что я упускаю из виду??
Ответ №1:
Понял.
$arrInt = array_diff_assoc(array_column($qrtn, 'comment_id'), array_column($qrtn, 'comment_parent'));
$arrCmts = array_diff_assoc(array_column($qrtn, 'comment_parent'), array_column($qrtn, 'comment_id'));
$arrCpr4 = array_intersect($arrInt, $arrCmts);
$arrCpr2 = array_diff($arrInt, $arrCmts);
foreach ($qrtn as $key1 => $val) {
$cmtItm2 = $val['comment_id'];
$prtItm2 = $val['comment_parent'];
$arCmt2 = array_search($prtItm2, $arrCpr4);
if (in_array($prtItm2, $arrCpr4)) {
$arCmt3 = array_search($cmtItm2, $arrCpr2);
$qrtn[$arCmt2]['subcmts'][$ss] = $val;
$ss ;
unset($qrtn[$arCmt3]);
}
}