如何将多个数组转换为1个标准?

时间:2018-05-09 17:00:45

标签: php

我有许多API响应服务

[
    'brand_name' => Adidas,
    'item_count' => 24
]

[
    'brand_name' => Nike,
    'count_item' => 254
]

[
    'name' => Reebok,
    'count_all' => 342
]

如何将其转换为1个标准?请尽快

['brand' => $value, 'cnt' = $count]

2 个答案:

答案 0 :(得分:1)

如果它们的顺序相同,只需将您的键与值组合:

$array = array_combine(['brand', 'cnt'], array_values($array));

如果没有,只需匹配并替换:

$array = array_combine(
    preg_replace(['/.*name.*/', '/.*count.*/'], ['brand', 'cnt'], array_keys($array)),
    $array);

如果可能是brandnamebrand_name等,请使用OR |

/.*(name|brand).*/

如果你知道所有可能的组合,那么:

$replace = ['brand_name' => 'brand', 'name' => 'brand',
            'item_count' => 'cnt', 'count_item' => 'cnt', 'count_all' => 'cnt'];

$array = array_combine(str_replace(array_keys($replace), $replace, array_keys($array)),
                       $array);

其中一个应该让你走上正确的道路。

答案 1 :(得分:0)

要将许多数组转换为上述标准,您需要考虑可应用于所有数组的通用条件。在你的情况下,我可以看到所有数组都有2个键,第一个键包含一个单词" name"所以我可以用它作为"品牌"的标准。然后有第二个键包含一个单词" count"用作" cnt"的标准。

$new_array = [];
foreach($array as $item) {
    $brand = '';
    $cnt = '';
    foreach($item as $key => $value) {
        if(strpos($key, 'name') !== false) {
            $brand = $value;
        }
        elseif(strpos($key, 'count') !== false) {
             $cnt = $value;
        }

        // more conditions
    }
    $new_array[] = ['brand' => $brand, 'cnt' => $cnt];
} 

假设您有另一个数组:

[
    'brand' => 'Danbo', 
    'total' => 200,
]

由于这是一个例外,你需要制定另一个条件:

elseif(strpos($key, 'brand') !== false) {
    $brand = $value;
}
elseif(strpos($key, 'total') !== false) {
    $cnt = $value;
}

或附加到现有条件:

if(strpos($key, 'name') !== false || strpos($key, 'brand') !== false) {
    $brand = $value;
}
elseif(strpos($key, 'count') !== false || strpos($key, 'total') !== false) {
    $cnt = $value;
}
相关问题