PHP 创建依赖于函数的二维数组


PHP Creating two dimensional arrays dependent on a function

我有一个这样的数组:

[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);
}

将根据函数的结果生成randomArrayName1randomArrayName2 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 .