如何获取元素在数组中的位置并在循环中忽略该元素?

时间:2019-01-19 04:12:54

标签: php arrays indexing

我正在Web应用程序中进行一系列数学运算,我想获得如下内容:

给出一个由N个元素组成的数组,例如[1,2,3],在屏幕上打印另一个具有相同元素数量的数组,其中每个位置都是该数组除要计算位置之外的所有元素的乘积。 / p>

结果示例:

[1,2,3]必须打印:[6,3,2]

[5,2,3,2,4]必须打印:[48,120,80, 120, 60]

3 个答案:

答案 0 :(得分:4)

您可以使用androidx.appcompat:appcompat获取数组中所有值的乘积,然后使用LifecycleOwner除以给定的每个值以从整体乘积中“删除”该值。

ComponentActivity

输出:

FragmentActivity

其他情况:

AppCompatActivity给出lifecycle

答案 1 :(得分:2)

没有特殊的数组操作(切片/拼接),只是超级简单的数学。

代码:(Demo

$array = [5,2,3,2,4];

foreach ($array as $val) {
    $result[] = array_product($array) / $val;
}

var_export($result);

输出:

array (
  0 => 48,
  1 => 120,
  2 => 80,
  3 => 120,
  4 => 60,
)

您可以在循环之前缓存array_product($array),以提高效率。 Demo这实际上与Nick的回答是相同的逻辑,我只是​​发现使用语言构造而非函数式编程更容易阅读。

答案 2 :(得分:1)

正常的for循环使您可以访问当前索引。在循环的每次迭代中,您可以使用array_slice进行复制,并使用array_splice删除一个元素。然后使用适当的回调array_reduce乘以剩余的值。

function reduce_to_products_without_value_at_index( $initial_array ) {
  $num_elements = count( $initial_array );
  $product_array = [];

  for ( $index = 0; $index < $num_elements; $index++ ) {
    $array_copy = array_slice( $initial_array, 0 );
    array_splice( $array_copy, $index, 1 );
    $product = array_reduce( $array_copy, function( $carry, $item ) {
      return $carry * $item;
    }, 1 );
    $product_array[$index] = $product;
  }

  print_r( $product_array );
}

reduce_to_products_without_value_at_index( [1,2,3] );
reduce_to_products_without_value_at_index( [5,2,3,2,4] );