如何将记录添加到先前定义的数组

我有一个是这样的一个数组:如何将记录添加到先前定义的数组

 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

回到顶部