【问题标题】:How to Convert 2D array into 1D array?如何将二维数组转换为一维数组?
【发布时间】:2015-07-16 04:43:26
【问题描述】:

我想将我的二维数组转换为一维数组。 当我做var_dump($image_name_db); 它显示:

array(2) {
  [0]=>
  array(1) {
    ["image"]=>
    string(7) "pic.PNG"
  }
  [1]=>
  array(1) {
    ["image"]=>
    string(14) "abouttown3.jpg"
  }
}

现在如何将它转换为一维数组。因为我想比较两个数组。一个数组是一维的,另一个数组是二维的,这就是为什么我想要一维的二维数组。所以我需要他们两个在一维中轻松比较。 我正在使用 codeigniter。

【问题讨论】:

  • 向我们展示您为此做了什么?
  • 为什么不能比较二维数组
  • 如果 php 版本为 5.5.0,则使用 array_column($arr, 'image');
  • @tamil-selvan 您应该对此发布答案,并包含对 5.5 之前的用户土地实施的参考

标签: php codeigniter


【解决方案1】:

您需要遍历数组并将图像存储到一维数组中。

<?php
$arr = array();
$arr[0]['image'] = 'pic.PNG';
$arr[1]['image'] = 'abouttown3.jpg';
$images = array();
if (! empty($arr)) {
  foreach ($arr as $row) {
    $images[] = $row['image'];
  }
}

echo "<br/> Existing";
echo '<pre>';
print_r($arr);
echo '</pre>';

echo "<br/> New";
echo '<pre>';
print_r($images);
echo '</pre>';

Working demo:

【讨论】:

    【解决方案2】:

    试试 -

    $array = array(array("image" => "pic.PNG"),  array("image" => "abouttown3.jpg"));
    $new = array_map(function($arr) {
        return $arr['image'];
    }, $array);
    

    输出

    array(2) {
      [0]=>
      string(7) "pic.PNG"
      [1]=>
      string(14) "abouttown3.jpg"
    }
    

    【讨论】:

    • 我这样做:$images_db_name = call_user_func_array('array_merge',$images_db_name);这说明什么。
    【解决方案3】:

    最好的方法是使用array_map,根据php doc

    array_map() 将回调函数应用于每个元素后,返回一个包含 array1 的所有元素的数组。回调函数接受的参数数量应该与传递给array_map()的数组数量相匹配

    示例:

    $output = array_map(function($current){
       return $current['image'];
    },$your_array);
    

    解释:

    回调函数接收迭代数组($your_array,二维数组)中的当前元素($current)并返回值推送到新数组(输出数组为$output,它是一个一维数组)。

    【讨论】:

    • 请您详细说明一下。
    【解决方案4】:

    当您原来的问题“如何比较两个多维数组”可以轻松解决时,为什么要创建一个新问题?

    查看Compare multidimensional arrays in PHP 了解更多信息。

    如果您真的想将多维数组转换为单维,请查看这篇文章:How to convert two dimensional array to one dimensional array in php5

    【讨论】:

    • 一个数组是一维的,另一个数组是二维的,这就是为什么我想将二维数组转换为一维然后轻松比较。
    【解决方案5】:

    如果php版本为5.5+,请使用array_column()函数

    array_column($image_name_db, 'image');
    

    见:http://php.net/manual/en/function.array-column.php

    对于以下不受支持的版本,请使用https://github.com/ramsey/array_column

    if (!function_exists('array_column')) {
        /**
         * Returns the values from a single column of the input array, identified by
         * the $columnKey.
         *
         * Optionally, you may provide an $indexKey to index the values in the returned
         * array by the values from the $indexKey column in the input array.
         *
         * @param array $input A multi-dimensional array (record set) from which to pull
         *                     a column of values.
         * @param mixed $columnKey The column of values to return. This value may be the
         *                         integer key of the column you wish to retrieve, or it
         *                         may be the string key name for an associative array.
         * @param mixed $indexKey (Optional.) The column to use as the index/keys for
         *                        the returned array. This value may be the integer key
         *                        of the column, or it may be the string key name.
         * @return array
         */
        function array_column($input = null, $columnKey = null, $indexKey = null)
        {
            // Using func_get_args() in order to check for proper number of
            // parameters and trigger errors exactly as the built-in array_column()
            // does in PHP 5.5.
            $argc = func_num_args();
            $params = func_get_args();
            if ($argc < 2) {
                trigger_error("array_column() expects at least 2 parameters, {$argc} given", E_USER_WARNING);
                return null;
            }
            if (!is_array($params[0])) {
                trigger_error(
                    'array_column() expects parameter 1 to be array, ' . gettype($params[0]) . ' given',
                    E_USER_WARNING
                );
                return null;
            }
            if (!is_int($params[1])
                && !is_float($params[1])
                && !is_string($params[1])
                && $params[1] !== null
                && !(is_object($params[1]) && method_exists($params[1], '__toString'))
            ) {
                trigger_error('array_column(): The column key should be either a string or an integer', E_USER_WARNING);
                return false;
            }
            if (isset($params[2])
                && !is_int($params[2])
                && !is_float($params[2])
                && !is_string($params[2])
                && !(is_object($params[2]) && method_exists($params[2], '__toString'))
            ) {
                trigger_error('array_column(): The index key should be either a string or an integer', E_USER_WARNING);
                return false;
            }
            $paramsInput = $params[0];
            $paramsColumnKey = ($params[1] !== null) ? (string) $params[1] : null;
            $paramsIndexKey = null;
            if (isset($params[2])) {
                if (is_float($params[2]) || is_int($params[2])) {
                    $paramsIndexKey = (int) $params[2];
                } else {
                    $paramsIndexKey = (string) $params[2];
                }
            }
            $resultArray = array();
            foreach ($paramsInput as $row) {
                $key = $value = null;
                $keySet = $valueSet = false;
                if ($paramsIndexKey !== null && array_key_exists($paramsIndexKey, $row)) {
                    $keySet = true;
                    $key = (string) $row[$paramsIndexKey];
                }
                if ($paramsColumnKey === null) {
                    $valueSet = true;
                    $value = $row;
                } elseif (is_array($row) && array_key_exists($paramsColumnKey, $row)) {
                    $valueSet = true;
                    $value = $row[$paramsColumnKey];
                }
                if ($valueSet) {
                    if ($keySet) {
                        $resultArray[$key] = $value;
                    } else {
                        $resultArray[] = $value;
                    }
                }
            }
            return $resultArray;
        }
    }
    

    或使用array_map

    $image_name_arr = array_map(function($arr){
       return $arr['image'];
    },$image_name_db);
    

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 1970-01-01
      • 2016-02-18
      • 2018-02-19
      • 1970-01-01
      • 2020-03-26
      相关资源
      最近更新 更多