当前位置: 首页 > 面试题库 >

在PHP中连接n个数组的值

邹书
2023-03-14
问题内容

我有一个未知数量的数组,每个数组包含一个未知数量的单词。我想连接每个列表中的值,以便将单词的所有可能的变体存储到最终数组中。

例如,如果数组1包含:

dog
cat

数组2包含:

food
tooth

数组3包含:

car
bike

我希望输出为:

dog food car
dog food bike
dog tooth car
dog tooth bike
cat food car
cat food bike
cat tooth car
cat tooth bike

可能有3个以上的列表,每个列表很可能包含2个以上的单词。

我想用PHP做到这一点。

如果我知道列表的数量,我知道该怎么做,尽管这可能不是最节省资源的方法。但是,foreach如果您知道数组的数量,则嵌套循环会起作用。如果不这样做怎么办?还有什么方法可以解决此问题,如果有100个数组(每个数组包含100个单词),这些方法仍然可以使用。还是1000?

谢谢!


问题答案:

您可以将所有单词数组放到一个数组中,并使用如下 递归 函数:

function concat(array $array) {
    $current = array_shift($array);
    if(count($array) > 0) {
        $results = array();
        $temp = concat($array);
        foreach($current as $word) {
          foreach($temp as $value) {
            $results[] =  $word . ' ' . $value;
          }
        }
        return $results;           
    }
    else {
       return $current;
    }
}

$a = array(array('dog', 'cat'), array('food', 'tooth'), array('car', 'bike'));

print_r(concat($a));

哪个返回:

Array
(
    [0] => dog food car
    [1] => dog food bike
    [2] => dog tooth car
    [3] => dog tooth bike
    [4] => cat food car
    [5] => cat food bike
    [6] => cat tooth car
    [7] => cat tooth bike
)

但是我想这对于大型数组会表现不佳,因为输出数组会很大。

为了解决这个问题,您可以使用类似的方法直接输出组合:

function concat(array $array, $concat = '') {
    $current = array_shift($array);

    $current_strings = array();

    foreach($current as $word) {
            $current_strings[] = $concat . ' ' . $word;
    }

    if(count($array) > 0) {
        foreach($current_strings as $string) {
            concat($array, $string);
        }       
    }
    else {
      foreach($current_strings as $string) {
          echo $string . PHP_EOL;
      }   
    }
}

concat(array(array('dog', 'cat'), array('food', 'tooth'), array('car', 'bike')));

这使:

dog food car
dog food bike
dog tooth car
dog tooth bike
cat food car
cat food bike
cat tooth car
cat tooth bike

通过这种方法,也很容易获得“子隐患”。只需在echo $string . PHP_EOL;之前插入concat($array, $string);,输出为:

 dog
 dog food
 dog food car
 dog food bike
 dog tooth
 dog tooth car
 dog tooth bike
 cat
 cat food
 cat food car
 cat food bike
 cat tooth
 cat tooth car
 cat tooth bike


 类似资料:
  • 问题内容: 在JavaScript中串联N个对象数组的最有效方法是什么? 数组是可变的,结果可以存储在输入数组之一中。 问题答案: 如果要连接两个以上的数组,那么这样做是为了方便和可能的性能。 对于仅连接两个数组,可以使用接受多个包含要添加到数组中的元素的参数的事实来代替将一个数组中的元素添加到另一个数组的末尾而不产生新数组。使用它也可以代替它,但是这样做似乎没有性能优势。 在ECMAScript

  • 问题内容: 如何在Java中连接两个数组? 问题答案: 使用Apache Commons Lang库 例如: 在Java 8中使用Stream: 或者像这样,使用flatMap: 为此,你必须使用反射:

  • 问题内容: 2个流: 给定可读流, 并且 获取包含 并 连接 流的惯用(简洁)方法是什么? 我不能做,因为这样流内容混杂在一起。 n个 流: 给定一个EventEmitter发出不确定数量的流,例如 一种将 所有流串联在一起的流 的惯用(简洁)方法是什么? 问题答案: 该合并的流包会连接流。自述文件中的示例: 我相信您必须立即添加所有流。如果队列为空,则自动结束。参见问题5。 该流流库是一个具有明

  • 问题内容: 我有一个通用的“ Dimension”和“ DimensionMember”表。 这些表存储大量维和维成员。 我想从可变数量的维中交叉连接维成员。示例:“性别”,“就业类型”,“合同类型”维度中的交叉联接维度成员应产生以下组合 组合的标签应通过连接维度成员的标签来创建(如上所示)。 先感谢您 更新 维度列表(例如“性别”,“就业类型”,“合同类型”)是DYNAMIC(由运行时的另一个查

  • 问题内容: 我想使用NumPy包在Python中垂直连接两个数组: 我想要这样的东西: 我们如何使用函数来做到这一点?我检查了这两个函数,但结果是相同的: 这两个功能都具有此功能: 问题答案: 问题在于两者和都是一维数组,因此只有一个轴可以将它们连接在一起。 相反,您可以使用( v 表示 垂直 ): 另外,是该函数的别名: 还值得注意的是,相同长度的多个数组可以一次堆叠。例如,将有四行。 在幕后,

  • 所以基本上,我的问题与连接Numpy中的空数组相同,但对于TensorFlow。 主要的动机是以一种比使用if语句更漂亮的方式来处理初始数组。我当前的伪代码是: 这个技术是可行的,但是我想让它变得更漂亮,也许只使用。这是一个自定义层的代码,所以我对模型内部的代码感兴趣。 我想要一个更接近已接受响应的解决方案,将E初始化为:。 这个问题已经足够接近了,但当我将其初始化为: 我得到一个空的张量,结果只