Php 从常规数组创建多维数组

Php 从常规数组创建多维数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我使用简单的html dom获取表的内容: foreach($html->find('#maintable .table tr td') as $a) { $array[] = $a->plaintext; } print_r($array); 返回的数组如下所示: Array ( [0] => 1 [1] => 0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d [2] => 309953

我使用简单的html dom获取表的内容:

foreach($html->find('#maintable .table tr td') as $a) {
     $array[] = $a->plaintext;
}

print_r($array);
返回的数组如下所示:

Array ( 
    [0] => 1 
    [1] => 0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d
    [2] => 309953166.54621424
    [3] => 30.9953%
    [4] => 2
    [5] => 0xe17c20292b2f1b0ff887dc32a73c259fae25f03b
    [6] => 200000001
    [7] => 20.0000%
    [8] => 3
    [9] => 0x0000000000000000000000000000000000000000
    [10] => 129336426
    [11] => 12.9336%
)
New Array (

[1]
    ['address'] => 0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d
    ['amount'] => 309953166.54621424
    ['percent'] => 30.9953%
[2]
    ['address'] => 0xe17c20292b2f1b0ff887dc32a73c259fae25f03b
    ['amount'] => 200000001
    ['percent'] => 20.0000%
[3] 
    ['address'] => 0x0000000000000000000000000000000000000000
    ['amount'] => 129336426
    ['percent'] => 12.9336%
我想从上面的数组创建一个新的多维数组,该数组从第一行开始,每三行跳过一行,如下所示:

Array ( 
    [0] => 1 
    [1] => 0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d
    [2] => 309953166.54621424
    [3] => 30.9953%
    [4] => 2
    [5] => 0xe17c20292b2f1b0ff887dc32a73c259fae25f03b
    [6] => 200000001
    [7] => 20.0000%
    [8] => 3
    [9] => 0x0000000000000000000000000000000000000000
    [10] => 129336426
    [11] => 12.9336%
)
New Array (

[1]
    ['address'] => 0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d
    ['amount'] => 309953166.54621424
    ['percent'] => 30.9953%
[2]
    ['address'] => 0xe17c20292b2f1b0ff887dc32a73c259fae25f03b
    ['amount'] => 200000001
    ['percent'] => 20.0000%
[3] 
    ['address'] => 0x0000000000000000000000000000000000000000
    ['amount'] => 129336426
    ['percent'] => 12.9336%
)

在新数组中,“address”表示原始数组中的[1][5]和[9]。“金额”表示[2][6]和[10],“百分比”表示[3][7]和[11]


我怎样才能做到这一点?谢谢

您可以使用
array\u chunk
对数组进行分块。使用
array\u reduce
循环通过chuncked数组。使用
array\u combine
$keys
数组用作键

$array = //Your array
$keys = array( 'address', 'amount', 'percent' );
$result = array_reduce( array_chunk( $array, 4 ), function($c, $o) use ($keys) {
    $c[ array_shift($o) ] = array_combine( $keys, $o );
    return $c;
}, array() );

echo "<pre>";
print_r( $result );
echo "</pre>";

假设数组基于代码中的4个不同元素

for ($i =0; $i<(count($array)/4) ; $i++){
  $myNewArra[$i]['address'] = $array[($i*4+1)];
  $myNewArra[$i]['amount'] = $array[($i*4+2)];
  $myNewArra[$i]['percent'] = $array[($i*4+3)];

}
在相同的相对位置,可以使用for循环

$newArray = [];
for($i=1; $i<count($oldArray); $i=($i+4)){
    $newArray[] = [
        'address'   => (isset($oldArray[$i]))     ? $oldArray[$i] : '',
        'amount'    => (isset($oldArray[($i+1)])) ? $oldArray[($i+1)] : '',
        'percent'   => (isset($oldArray[($i+2)])) ? $oldArray[($i+2)] : '',
    ];
}

print_r($newArray);

for($i=0;$i给定示例中的输入数组,这应该满足您的要求:

Array
(
    [0] => Array
        (
            [address] => 0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d
            [amount] => 309953166.54621424
            [percent] => 30.9953%
        )

    [1] => Array
        (
            [address] => 0xe17c20292b2f1b0ff887dc32a73c259fae25f03b
            [amount] => 200000001
            [percent] => 20.0000%
        )

    [2] => Array
        (
            [address] => 0x0000000000000000000000000000000000000000
            [amount] => 129336426
            [percent] => 12.9336%
        )
)

另一个选项可能是使用
%
运算符

Array
(
    [1] => Array
        (
            [address] => 0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d
            [amount] => 309953166.54621424
            [percent] => 30.9953%
        )

    [2] => Array
        (
            [address] => 0xe17c20292b2f1b0ff887dc32a73c259fae25f03b
            [amount] => 200000001
            [percent] => 20.0000%
        )

    [3] => Array
        (
            [address] => 0x0000000000000000000000000000000000000000
            [amount] => 129336426
            [percent] => 12.9336%
        )

)

我相信您接受了错误的答案。其他两个答案都快得多,因为它“动态”生成数组,而不是先创建数组,然后再对其进行操作。
Array
(
    [1] => Array
        (
            [address] => 0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d
            [amount] => 309953166.54621424
            [percent] => 30.9953%
        )

    [2] => Array
        (
            [address] => 0xe17c20292b2f1b0ff887dc32a73c259fae25f03b
            [amount] => 200000001
            [percent] => 20.0000%
        )

    [3] => Array
        (
            [address] => 0x0000000000000000000000000000000000000000
            [amount] => 129336426
            [percent] => 12.9336%
        )

)