当前位置: 首页 > 知识库问答 >
问题:

从一个多维数组中获取值,并基于来自第一键的匹配值将其放入另一个多维数组中

孟晋
2023-03-14

我有两个数组,$FULL_LIST和$ONLY_TITLES根据第一个键匹配值。

$FULL_LIST:

Array
(
    [0] => Array
        (
            [0] => samsung-a40 
            [1] => Samsung A40 Phone
            [2] => 
            [3] => 21
            [4] => 334234
            [5] => 0          
        )

    [1] => Array
        (
            [0] => samsung-a72
            [1] => Galaxy A72 Phone
            [2] => 
            [3] => 230
            [4] => 239049
            [5] => 0    
        )
    [2] => Array
        (
            [0] => lg-k61
            [1] => LG K61 Phone 
            [2] => 
            [3] => 22
            [4] => 249582
            [5] => 0    
        )


  etc...

$only_titles:

Array
(
    [0] => Array
        (
            [0] => samsung-a40 
            [1] => Black Phone Case For Samsung A40               
        )

    [1] => Array
        (
            [0] => lg-k61
            [1] => Red Case LG K61 Phone            
        )

    [2] => Array
        (
            [0] => samsung-a72
            [1] => Folding Phone Case for Galaxy A72 Phone          
        )
   
  etc...

我想从$only_title数组(其基本的长乘积标题)的第二个键中取值,并将其替换到$full_list数组中:

$final_result:

Array
(
    [0] => Array
        (
            [0] => samsung-a40
            [1] => Black Phone Case For Samsung A40   // title from $only_titles
            [2] => 
            [3] => 21
            [4] => 334234
            [5] => 0          
        )

    [1] => Array
        (
            [0] => samsung-a72
            [1] => Folding Phone Case for Galaxy A72 Phone   // title from $only_titles     
            [2] => 
            [3] => 230
            [4] => 239049
            [5] => 0    
        )
    [2] => Array
        (
            [0] => lg-k61
            [1] => Red Case LG K61 Phone  // title from $only_titles
            [2] => 
            [3] => 22
            [4] => 249582
            [5] => 0    
        )
  etc...

我尝试过array_replace_recursive(),但问题是它期望子数组的顺序是相同的。但是,正如您在两个数组中所看到的,第二个子数组并不匹配。在array_replace_recursive()中,第二个子数组错误:

[1] => Array
    (
        [0] => samsung-a72
        [1] => Red Case LG K61 Phone  // this is wrong
        [2] => 
        [3] => 230
        [4] => 239049
        [5] => 0    
    )

如何检查来自第一个键的值是否匹配?

共有1个答案

余信然
2023-03-14

这个脚本将帮助您解决问题

<?php

$full_array = [
    [
        'samsung-a40',
        'Samsung A40 Phone',
        null,
        21,
        334234,
        0,
    ],
    [
        'samsung-a72',
        'Galaxy A72 Phone',
        null,
        230,
        239049,
        0,
    ],
];

$only_titles = [
    [
        'samsung-a40',
        'Black Phone Case For Samsung A40',
    ],
    [
        'samsung-a72',
        'Red Case LG K61 Phone  ',
    ],
];

$formattedOnlyTitles = [];
foreach ($only_titles as $value) {
    $formattedOnlyTitles[$value[0]] = $value[1];
}

$fullArrayWithNewTitle = [];
foreach ($full_array as $value) {
    if (isset($formattedOnlyTitles[$value[0]])) {
        $value[1] = $formattedOnlyTitles[$value[0]];
    }

    $fullArrayWithNewTitle[] = $value;
}

print_r($fullArrayWithNewTitle);

输出

Array
(
    [0] => Array
        (
            [0] => samsung-a40
            [1] => Samsung A40 Phone
            [2] => 
            [3] => 21
            [4] => 334234
            [5] => 0
        )

    [1] => Array
        (
            [0] => samsung-a72
            [1] => Galaxy A72 Phone
            [2] => 
            [3] => 230
            [4] => 239049
            [5] => 0
        )
)

首先,我更改title_onlyvar的格式,以便在下一个foreach中使用它

$formattedOnlyTitles = [];
foreach ($only_titles as $value) {
    $formattedOnlyTitles[$value[0]] = $value[1];
}

在下一个foreach中,我只使用新格式化的title_only数组检查标题

if (isset($formattedOnlyTitles[$value[0]])) {
    $value[1] = $formattedOnlyTitles[$value[0]];
}

如果需要的话,可以更改标题

 类似资料:
  • 我有两个多维数组,我想通过使用其中一个数组的值和另一个数组的键来组合它们。数组如下: 阵列1: 阵列 2: 我想生成的结果数组如下: 有没有一个PHP函数可以用来完成这个任务?

  • 问题内容: 我有一个像这样的数组: 如何删除重复的值,以便得到此信息: 我尝试使用array_unique,但是我认为由于该数组是多维的,因此无法正常工作。 编辑:我还需要此数组是多维的,并且以这种格式,我不能展平它。 问题答案: 在比较值以查找唯一值之前正在使用字符串转换: 注意 :当且仅当时,两个元素才被视为相等。换句话说:当字符串表示相同时。将使用第一个元素。 但是数组将始终转换为: 您可以

  • 基本上我有一个数组如下所示: 用什么方法来计算重复次数最多的动作以及它重复了多少次?关键字“when”无关紧要。

  • 问题内容: 例 问题,如何获得单一值,例如: 问题答案: 查看您的中的键和缩进: …等等

  • 我有一个数组,看起来像:。而将始终保持常数。我希望x每迭代增加100。 我就是这么做的: null null 正如您所看到的,它不是在增加值。它总是只是插入。在第一个名为pies的对象中,我希望和下一个名为cakes的对象为。 我该怎么做?

  • 问题内容: 例如: 一个) 与 b) 最初以为我会为了简化而选择a)。 我知道Java不会像C那样在内存中线性存储数组,但是这对我的程序有什么影响? 问题答案: 通常,在搜索答案时,最好的办法是查看如何将选择编译到JVM字节码中: 这被翻译成: 因此,如您所见,JVM已经知道我们在谈论多维数组。 进一步说明: 这被转换为(跳过循环): 因此,如您所见,多维数组在VM内部进行处理,无用指令不会产生开