在PHP中提取多维关联数组
我有一个以下格式的数组:在PHP中提取多维关联数组,php,Php,我有一个以下格式的数组: Array ( [accountID] => Array ( [0] => 412216 [1] => 396408 [2] => 522540 ) [mailBody] => Array ( [0] => 'We are glad to have contact you'
Array
(
[accountID] => Array
(
[0] => 412216
[1] => 396408
[2] => 522540
)
[mailBody] => Array
(
[0] => 'We are glad to have contact you'
[1] => 'Thank you for your cooperation'
[2] => 'One of our customer service representatives will contact you soon'
)
[mailAttachments] => Array
(
[0] => 'URL1'
[1] => 'URL1'
[2] => 'URL1'
)
)
此数组从邮件箱中提取一些信息。我想提取每个accountID,并附带同等的邮件正文和邮件附件。
非常感谢您的回复。不漂亮但有效(如果我正确理解您的目的):
$mails=array();
对于($i=0,$cnt=count($array['accountID']);$i<$cnt;$i++){
$mails[]=数组(
'accountId'=>$array['accountId'][$i],
'mailBody'=>$array['mailBody'][$i],
'mailAttachments'=>$array['mailAttachments'][$i]
);
}
需要注意的是,这种语法需要PHP5.3
这将重新排列数组,以便所有属于一起的项都位于一个数组中。然后,您可以在数组中循环并使用它执行任何需要的操作
foreach ($mails as $mail) {
// use $mail['id'], $mail['body'], $mail['attachments'] ...
}
使用数组索引
$i = 0
$accountID[$i];
$mailBody[$i];
$mailAttachments[$i];
但更好的设计是尽可能将所有这些变量封装到一个数组中。比如:
$accounts = array();
$account = array(
"id" => "",
"mailBody" => "",
"mailAttachments" => "",
);
$accounts[] = $account;
PHP为此内置了一个函数names。如果回调为
NULL
,则会创建所需的数组组合。因为我很懒,所以我使用将参数传递给函数
$array
是否为数组:
$arranged = call_user_func_array('array_map', array(NULL) + $array);
这个问题太模糊了。你试过什么?什么不起作用了?谢谢你给我时间,把数组的长度分配给变量$len=count($array['accountID']);?,不是最好的做法吗@AndreDublin这正是我在那里使用
$cnt
@Niko所做的,但似乎每次运行for循环时,每次循环迭代时都会运行count()函数。不确定它如何将性能方面的设置等同于for循环外部而不是内部的count()。@AndreDublin相信我,它只执行一次-for循环的语法是for(a;b;c)
,而a在进入循环时执行一次-对吗?你通常会把代码放在那里,初始化用于计数的变量。我在a中使用了一个逗号来放置两个命令,因此b(条件)只是$I<$cnt
部分,而a同时是$I=0
和$cnt=count(…)
@Niko-ah我明白了,我没有注意到那里的逗号。这是一个简洁的解决方案,但肯定需要一个注释来防止对那里到底发生了什么混淆;)
$accounts = array();
$account = array(
"id" => "",
"mailBody" => "",
"mailAttachments" => "",
);
$accounts[] = $account;
$arranged = call_user_func_array('array_map', array(NULL) + $array);