如何将记录添加到先前定义的数组
我有一个是这样的一个数组:如何将记录添加到先前定义的数组
Array (
[0] => Array
(
[0] => 108132368
[1] => Pouya
[2] => Vaghefi
[3] => Hi
)
[1] => Array
(
[0] => How r u
)
[2] => Array
(
[0] => 101524007
[1] => Pega
[2] =>
[3] => /start
)
[3] => Array
(
[0] => OKAY
)
[4] => Array
(
[0] => Hello?
)
)
背后的代码使这个放在这里:
$sender_ids = array(); $sender_infos = array();
for($i=0;$i<$num;$i++){
$sender_id = $updateArray["result"][$i]["message"]["from"]["id"];
$sender_fname = $updateArray["result"][$i]["message"]["from"]["first_name"];
$sender_lname = $updateArray["result"][$i]["message"]["from"]["last_name"];
$sender_uname = $updateArray["result"][$i]["message"]["from"]["username"];
$sender_msg = $updateArray["result"][$i]["message"]["text"];
// sender id
if(!(in_array($sender_id, $sender_ids))){
$sender_ids[] = $sender_id;
$sender_infos[] = [
$sender_id,
$sender_fname,
$sender_lname,
$sender_msg
];
}else{
// $key = array_search($sender_id, $sender_ids);
$sender_infos[] = [
$sender_msg
];
}
现在的问题是与其他声明。基本上,如果sender_id
再次重复它只会将sender_msg
添加到sender_info
。
但是我想要做的是将sender_msg
添加到之前已经创建好的数组中。事实上,它必须搜索定义的sender_id
并将其他消息添加到该消息。
因此,全阵列会是这样:
Array (
[0] => Array
(
[0] => 108132368
[1] => Pouya
[2] => Vaghefi
[3] => Hi
[4] => How r u
[5] => Hello?
)
[2] => Array
(
[0] => 101524007
[1] => Pega
[2] =>
[3] => /start
[4] => OKAY
)
)
回答:
您应该使用array_search()
而不是in_array()
,像这样:
if(false === $key = array_search($sender_id, $sender_ids)){ $sender_ids[] = $sender_id;
$sender_infos[] = [
'sender_id' => $sender_id,
'sender_fname' => $sender_fname,
'sender_lname' => $sender_lname,
'sender_msg' => [$sender_msg],
];
}else{
$sender_infos[$key]['sender_msg'][] = $sender_msg;
}
,然后使用array_search()
中的$key
将值插入先前生成的索引中。另外,你应该将消息保存为嵌套数组,并将其设置为适当的关联数组。
回答:
你需要得到正确的发送者,然后发送邮件追加到它, 类似:
if(!(in_array($sender_id, $sender_ids))){ $sender_ids[] = $sender_id;
$sender_infos[$sender_id] = [
$sender_id,
$sender_fname,
$sender_lname,
'messages'=>[$sender_msg]
];
}else{
$sender_infos[$sender_id]['messages'][] = $sender_msg;
}
回答:
在您的类似答案中,由于您自己的破坏行为而被删除,我发布了最佳做法。我建议使用临时密钥来减少阵列扫描并提高效率:
我做了很多修复/改进。您只需要一个临时阵列(
$sender_infos
)。您应该使用它们的id
作为关键字保存每个唯一用户的阵列;这为您提供了isset()
的速度。在第二个
foreach()
循环中,我交换内循环implode()
以浓缩代码块。
要很直接,使用in_array()
或array_search()
不会是有效的,因为他们会做(可能全)阵列扫描。 isset()
不会这样做,因此效率更高。
代码:(Demo)
$sender_infos = array(); foreach($updateArray["result"] as $message){
if(!isset($sender_infos[$message["message"]["from"]["id"]])){
$sender_infos[$message["message"]["from"]["id"]]=[
// 'sender_id' => $message["message"]["from"]["id"], // not used later
'sender_fname' => isset($message["message"]["from"]["first_name"]) ? $message["message"]["from"]["first_name"] : '',
// 'sender_lname' => isset($message["message"]["from"]["last_name"]) ? $message["message"]["from"]["lasst_name"] : '', // not used later
'sender_msg' => [$message["message"]["text"]]
];
}else{
$sender_infos[$message["message"]["from"]["id"]]['sender_msg'][]=$message["message"]["text"];
}
}
foreach($sender_infos as $sender_id=>$a){
echo $a['sender_fname'],"\n\t";
echo '<div class="direct-chat-text">';
echo implode("</div>\n\t<div class=\"direct-chat-text\">",$a['sender_msg']);
echo "</div>\n\n";
}
输出:
Pouya <div class="direct-chat-text">asdsa</div>
<div class="direct-chat-text">asdsa</div>
<div class="direct-chat-text">jjjjj</div>
H.Z
<div class="direct-chat-text">Sj</div>
在许多情况下,array_values()
用于重新索引第一环路之后的阵列。然而,就你而言,保留你的密钥是有用的,因为我在你的其他问题中看到你需要利用(计数)这些数据部分。
以上是 如何将记录添加到先前定义的数组 的全部内容, 来源链接: utcz.com/qa/262304.html