如何按键或值填充php数组

时间:2017-07-07 04:28:36

标签: php arrays

我有简单的PHP数组用于位置邮政编码及其名称。我希望'name'压缩'代码'。此代码来自WooCommerce数据库区域。

 Array (
    [0] => Array
        (
            [name] => Jambi Selatan
            [code] => 36139
            [code_name] => 36139 - Jambi Selatan
        )

    [1] => Array
        (
            [name] => Jambi Selatan
            [code] => 36137
            [code_name] => 36137 - Jambi Selatan
        )

    [2] => Array
        (
            [name] => Bagan Pete
            [code] => 36129
            [code_name] => 36129 - Bagan Pete
        )

    [3] => Array
        (
            [name] => Bagan Pete
            [code] => 36127
            [code_name] => 36127 - Bagan Pete
        )

)

我希望得到最终结果由'name'和'code'组合如下:我尝试使用array_unique方法但不能正常工作。

Array (
    [0] => Array
        (
            [name] => Jambi Selatan
            [code] => 36139, 36137
            [code_name] => 36139, 36139 - Jambi Selatan
        )

    [1] => Array
        (
            [name] => Bagan Pete
            [code] => 36127, 36129
            [code_name] => 36127, 36129 - Bagan Pete
        )

)

请再次帮助我。

更新

我尝试这种方法,但没有修复'code_name'

$out = array();
            foreach ($new_arr as $key => $value){
                if (array_key_exists($value['name'], $out)){
                    $out[$value['name']]['code'] .= ', '.$value['code'];
                } else {
                    $out[$value['name']] = array(
                        'name' => $value['name'],
                        'code' => $value['code'],
                        'code_name' => $value['code'] . ' - ' . $value['name']
                    );
                }
            }
            $out = array_values($out);
            print_r($out);

3 个答案:

答案 0 :(得分:1)

您必须按in_array检查重复的名称并更新存在的数组值。如果不存在,请将该值插入$out数组。

$out = array();
foreach($new_arr as $k=>$v) {
    //empty array state
    if(count($out) == 0) {
        $out[] = $v;
        continue;
    }   
    foreach ($out as $key => $value) {
        if(in_array($v["name"],$value)) {
            $out[$key]["code"] .= ",".$v["code"];
            //for the code_name output as OP described
            $nn = explode("-", $value["code_name"]);
            $l = count($nn) - 1;
            unset($nn[$l]);
            $out[$key]["code_name"] = implode($nn).",".$v["code_name"];
            break;
        } else {
            if((count($out)-1) == $key) {
                $out[] = $v;
            }
        }
    }
}
var_dump($out);

答案 1 :(得分:0)

对于像我这样的问题,这个方法可以解决它:

$out = array();
            foreach ($new_arr as $key => $value){
                if (array_key_exists($value['name'], $out)){
                    $out[$value['name']]['code'] .= ', '.$value['code'];
                    $out[$value['name']]['code_name'] .= ', '.$value['code'] . ' - ' . $value['name'];
                } else {
                    $out[$value['name']] = array(
                        'name' => $value['name'],
                        'code' => $value['code'],
                        'code_name' => $value['code']
                    );
                }
            }
            $out = array_values($out);
            print_r($out);

最终结果;

Array
(
    [0] => Array
        (
            [name] => Jambi Selatan
            [code] => 36139, 36137
            [code_name] => 36139, 36137 - Jambi Selatan
        )

    [1] => Array
        (
            [name] => Bagan Pete
            [code] => 36129, 36127
            [code_name] => 36129, 36127 - Bagan Pete
        )

)

答案 2 :(得分:0)

请尝试以下方法作为另一种方法:

Spring-boot