如何解决在 PHP7 中,在数组中创建子数组,其中两个键在两个元素中具有相同的值
我正在尝试使用这样的数组:
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'),'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]);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。