在PHP中提取多维关联数组

时间:2011-09-08 07:52:39

标签: php

我有一个以下格式的数组:

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'
        )

)

此数组从邮箱中提取一些信息。我想用等效的mailBody和mailAttachments提取每个accountID。 非常感谢您的回复。

4 个答案:

答案 0 :(得分:1)

不漂亮但有效(如果我理解你的目的):

$mails = array();
for ($i = 0, $cnt = count($array['accountID']); $i < $cnt; $i++) {
    $mails[] = array(
        'accountId'       => $array['accountID'][$i],
        'mailBody'        => $array['mailBody'][$i],
        'mailAttachments' => $array['mailAttachments'][$i]
    );
}

答案 1 :(得分:1)

PHP为此构建了一个函数,名称为array_map。如果回调是NULL,则会创建所需数组的组合。因为我很懒,我正在使用call_user_func_array将参数传递给函数。

$array是你的数组:

$arranged = call_user_func_array('array_map', array(NULL) + $array);

答案 2 :(得分:0)

$mails = array_map(function ($id, $body, $attachments) {
             return compact('id', 'body', 'attachments');
         }, $array['accountId'], $array['mailBody'], $array['mailAttachments']);

请注意,此语法需要PHP 5.3。

这会重新排列数组,因此所有属于一起的项目都在一个数组中。然后,您可以遍历数组并随意执行任何操作。

foreach ($mails as $mail) {
    // use $mail['id'], $mail['body'], $mail['attachments'] ...
}

答案 3 :(得分:0)

使用数组索引。

$i = 0
$accountID[$i];
$mailBody[$i];
$mailAttachments[$i];

但更好的设计是尽可能将所有这些变量包装到一个数组中。类似的东西:

$accounts = array();
$account = array(
                  "id" => "",
                  "mailBody" => "",
                  "mailAttachments" => "",
                );

$accounts[] = $account;