我有一个这样的数组:
[apple] => 11
[pear] => 5
[banana] => 3
[cucumber] => 2
[tomatoes] => 8
我想创建这样的多维数组:
[randomArrayName1]
[apple] => 11
[banana] => 3
[tomatoes] => 8
[randomArrayName2]
[pears] => 5
[cucumber] => 2
我在下面写了这个,但它不起作用,我不知道如何让它做:我需要它做什么
$quantity = array();
foreach($fruit as $key => $value) {
$quantity = Finder($key);
}
将根据函数的结果生成randomArrayName1
和randomArrayName2
Finder()
。根据该结果,我希望将水果数组创建为二维数组。
溶液:问题是我编写的函数创建了像 randomArrayName1、randomArrayName2 这样的名称......实际上是一个 XML 函数。因此,此函数的结果不是数组,而是 XML 简单对象。这导致了创建多维数组的问题。一旦我实现了下面的代码,它将SimpleXML转换为Array并且代码工作正常。$type是 SimpleXML 数组$out是结果数组
foreach ( (array) $type as $index => $node )
$out[$index] = ( is_object ( $node ) ) ? xml2array ( $node ) : $node;
您可以使用
array_reduce
.它需要三个参数,一个要操作的初始数组,一个应该对每个元素进行操作的函数(这反过来需要两个参数,$carry
,这是一个每次通过 return 语句传递给函数的变量,$item
,这是正在操作的数组项(,最后是函数内$carry
的"初始"值, 在这种情况下,这将是我们最终返回的多维数组。
这是一个示例,其中 Finder
函数根据数组中项的值是奇数还是偶数返回键,并相应地对值进行排序。
请注意,我们正在对水果array_keys
进行操作,因此我们可以访问化简器中的键和值。
<?php
$fruit = ['apple' => 11, 'pear' => 5, 'banana' => 3, 'cucumber' => 2, 'tomatoes' => 8];
function Finder($fruit) {
return $fruit % 2 == 0 ? 'even' : 'odd';
}
$multi = array_reduce(array_keys($fruit), function($carry, $item) use ($fruit) {
$val = $fruit[$item];
$carry[Finder($val)][$item] = $val;
return $carry;
}, []);
var_dump($multi);
/* // output
array(2) {
["odd"]=>
array(3) {
["apple"]=>
int(11)
["pear"]=>
int(5)
["banana"]=>
int(3)
}
["even"]=>
array(2) {
["cucumber"]=>
int(2)
["tomatoes"]=>
int(8)
}
}
*/
您需要创建新索引或访问它(如果已经创建(,然后使用现有键在该索引下创建另一个元素并分配值:
$quantity = array();
foreach($fruit as $key => $value) {
$quantity[Finder($key)][$key] = $value;
}
这是假设Finder()
返回一个字符串,如 randomArrayName1
.