【问题标题】:Dealing with array PHP处理数组 PHP
【发布时间】:2017-03-05 19:23:49
【问题描述】:

我正在尝试排序以下数组。

数组

$fruits = array(
    'mango',
    'mango red',
    'mango yellow',
    'orange',
    'banana',
    'apple',
    'apple red',
    'apple green',
);

我做了什么:

$data = array_flip( $fruits ); // flip array
$data = array_fill_keys( array_keys( array_flip( $data ) ), 'array(),' ); // fill array value: "array(),"

print_r( $data );

我想要这个结果:

$fruits = array(
    'mango'      => array(
        'red'       => array(),
        'yellow'    => array(),
    ),
    'orange'    => array(),
    'banana'    => array(),
    'apple'     => array(
        'red'       => array(),
        'green'     => array(),
    ),
);

有人知道怎么做吗?

希望你能理解这个问题。提前谢谢您。

【问题讨论】:

    标签: php arrays array-flip


    【解决方案1】:

    遍历数组,并拆分字符串。然后递归创建嵌套数组。

    $result = array();
    foreach ($fruits as $f) {
        $f_array = explode(' ', $f);
        $start = &$result;
        foreach ($f_array as $word) {
            if (!isset($start[$word])) {
                $start[$word] = array();
            }
            $start = &$start[$word];
        }
    }
    var_dump($result);
    

    DEMO

    【讨论】:

    • $fruits = array( 'apple green one', 'apple green two', ); // 最佳答案
    【解决方案2】:

    使用以下方法(针对您当前的数组):

    $result = [];
    foreach ($fruits as $fruit) {
        $parts = explode(' ', $fruit);
        if (count($parts) == 1) {
            $result[$fruit] = [];
        } elseif (isset($result[$parts[0]])) {
            $result[$parts[0]][$parts[1]] = [];
        }
    }
    
    print_r($result);
    

    【讨论】:

    • 这并不能概括为每个水果中超过 2 个单词。
    • @Barmar,我知道,这就是我为您当前的数组编写 的原因
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多