【问题标题】:Get the index of the same value of a array php获取数组php相同值的索引
【发布时间】:2021-04-07 10:17:50
【问题描述】:

我有一个像这样的关联数组[这个数组是两个不同数组的组合]:

我结合数组和通过array_combine()函数

$products = array_combine($one_array_key,$second_array_values);

$products = array(
    "arn1" =>"A",
    "arn2" =>"A",
    "arn3" =>"A",
    "arn4" =>"B",
    "arn5" =>"B",
    "arn6" =>"B"
);

如您所见,数组AB 中有两个不同的值。

我想要两个数组由它的键组成。

或者换句话说:比较关联数组的值和匹配值的键将被提取到另一个数组。

所以我的预期结果是:

 $A = array("arn1","arn2","arn3");
 $B = array("arn4","arn5","arn6");

我的代码:

$products = array_combine($one_array_key,$second_array_values);
$products_distinct_values = array_count_values($product);
$products_distinct_values_keys = array_keys($products_distinct_values);

    foreach ($products as $key => $value)
    {
        // what should I need write there, to get the x numbers of array(s), containing *key* of the same *value of array*
    }

【问题讨论】:

  • 这能回答你的问题吗? Find all array keys that has same value
  • @El_Vanja 我想获得 x 个数组,作为 Jhon_Doe 的回答。 are unknow not know 的值是动态的
  • 建议的副本有一个动态解决方案。
  • 我试过了,但我试图在不同的阵列上取得结果
  • @Shani 为什么您认为您需要在全局范围内声明单个变量?我不会这样做,因为你失去了在这个“数组集合”上使用数组函数的能力。可变变量也不是一个好主意。那么在你生成所有这些不可预知的变量名之后,你的代码会发生什么?您的代码如何知道要访问什么?你正在走上一条痛苦的道路。

标签: php arrays


【解决方案1】:

我绝对不会在专业项目中使用这种“可变变量”技术,但它确实满足了您的要求。我会敦促你找出你的 XY 问题中的愚蠢之处。

实际上,下面的 sn-p 将同步迭代两个相关的输入数组并创建可变名称的结果数组以将值推入。

代码:(Demo)

$one_array_key = ['A', 'A', 'A', 'B', 'B', 'B'];
$second_array_values = ['arn1', 'arn2', 'arn3', 'arn4', 'arn5', 'arn6'];

foreach ($one_array_key as $index => $value) {
    $$value[] = $second_array_values[$index];
}

var_export($A);
echo "\n---\n";
var_export($B);

输出:

array (
  0 => 'arn1',
  1 => 'arn2',
  2 => 'arn3',
)
---
array (
  0 => 'arn4',
  1 => 'arn5',
  2 => 'arn6',
)

拥有一个包含键和相关子数组的静态命名变量更有意义。这样,您可以根据需要在结果上调用array_keys(),以找出在原始输入中找到了哪些组。

代码:(Demo)

$result = [];
foreach ($one_array_key as $index => $value) {
    $result[$value][] = $second_array_values[$index];
}
var_export($result);

输出:

array (
  'A' => 
  array (
    0 => 'arn1',
    1 => 'arn2',
    2 => 'arn3',
  ),
  'B' => 
  array (
    0 => 'arn4',
    1 => 'arn5',
    2 => 'arn6',
  ),
)

【讨论】:

  • 老实说,请不要在您的项目中使用第一个 sn-p。一年后,你会拍拍自己的额头说:“为什么我认为这是个好主意!” (我知道,因为我去过那里。)
  • 也许如果你给我一个 3v4l.org 链接,并提供更多你的场景上下文,我也许可以帮助你进行设计。 (工作结束后)
  • 是的,我会这样做
【解决方案2】:

您可以使用以下 PHP 代码来执行此操作。

<?php
$products = array("arn1"=>"A", "arn2"=>"A", "arn3"=>"A", "arn4"=>"B", "arn5"=>"B", "arn6"=>"B");
$A = array();
$B = array();
foreach ($products as $key => $value)
{
    if ($value == "A")
    {
        array_push ($A, $key);
    }
    else if ($value == "B")
    {
        array_push ($B, $key);
    }
}
print_r ($A);
print_r ($B);
?>

【讨论】:

  • 感谢您回答这个问题。我之前尝试过,但是当我更新我的问题时,我需要 x 个数组并且我不知道数组的值。所以 if ($value == "A") 在我处理随机数据时没有帮助
猜你喜欢
  • 1970-01-01
  • 2016-03-20
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多