在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);