Php 从常规数组创建多维数组
我使用简单的html dom获取表的内容: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
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%
)
)