我正在尝试采用这样的数组:
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]
的值。如果它们匹配,则具有 [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 === $prt2\n";
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 (&$qrtn, &$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]);
}
}
});
我错过了什么??
明白了。
$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]);
}
}
您可以通过声明对每个父条目的引用并将所有子条目推送到其各自的父引用中,在输入数组的单次传递中将条目嵌套到父子关系中。然后,遇到的任何子条目都可以从输入数组中删除,因为它将被移动到父条目中的正确位置。
这种方法的优点在于,如果在其第一个子级之前遇到父级,或者在其父级之前遇到第一个子级,这并不重要。参考文献确保一切都移动到正确的位置。
代码:(演示)
foreach ($array as $i => &$row) {
if ($row['comment_parent']) { // is a child
$commentsRef[$row['comment_parent']][] =& $row; // push child into reference
unset($array[$i]); // remove child from (first level) of the original array
} else { // is a parent
$commentsRef[$row['comment_id']] ??= []; // ensure there is an array to reference
$row['cmt_reply'] =& $commentsRef[$row['comment_id']]; // assign reference
}
}
var_export($array);