簡體   English   中英

PHP數組。 基於鍵的簡單拆分

[英]PHP array. Simple split based on key

這更多是對快速建議的要求,因為我很難相信手頭的任務沒有本機功能。 考慮以下:

array => 
(0) => array("id" => "1", "groupname" => "fudge", "etc" => "lorem ipsum"),
(1) => array("id" => "2", "groupname" => "toffee", "etc" => "lorem ipsum"),
(2) => array("id" => "3", "groupname" => "caramel", "etc" => "lorem ipsum")
)

我想要得到的是一個僅使用“ groupname”的新數組,因此將等於:

array =>
(0) => "fudge",
(1) => "toffee",
(2) => "caramel"
)

我知道通過遞歸遍歷原始數組非常簡單,但是我想知道是否有更簡單的方法來獲得最終結果。 我在Internet和PHP手冊上四處張望,找不到任何東西

謝謝您閱讀此問題西蒙

為此有一個本機的array_column()函數(自PHP 5.5起):

$column = array_column($arr, 'groupname');

如果您使用的是PHP 5.3,則可以這樣使用array_map [docs]

$newArray = array_map(function($value) {
    return $value['groupname'];
}, $array);

否則,創建一個正常函數並傳遞其名稱(請參見文檔)。

另一個解決方案是僅遍歷數組:

$newArray = array();

foreach($array as $value) {
    $newArray[] = $value['groupname'];
}

您絕對不必使用遞歸。

所有數組鍵的值:

$array = [
    ["id"=>"1","user"=>"Ivan"],
    ["id"=>"2","user"=>"Ivan"],
    ["id"=>"3","user"=>"Elena"]
    ];

$res = [];
$array_separate = function($value, $key) use (&$res){
    foreach($value AS $k=>$v) {
        $res[$k][] = $v;
    }
};

array_walk($array, $array_separate);
print_r($res);

結果:

Array
(
    [id] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )
    [user] => Array
        (
            [0] => Ivan
            [1] => Ivan
            [2] => Elena
        )

)

http://sandbox.onlinephpfunctions.com/code/3a8f443283836468d8dc232ae8cc8d11827a5355

使用array_map

<?php
$a = array(
    array("id" => "1", "groupname" => "fudge", "etc" => "lorem ipsum"),
    array("id" => "2", "groupname" => "toffee", "etc" => "lorem ipsum"),
    array("id" => "3", "groupname" => "caramel", "etc" => "lorem ipsum")
);

function get_groupname( $arr )
{
    return $arr['groupname'];
}
$b = array_map( 'get_groupname', $a );

var_dump( $a );
var_dump( $b );

http://codepad.org/7kNi8nNm

據我所知,PHP中沒有一個簡單的函數可以為您解決這個問題,數組結構是用戶定義的,因此您必須遍歷數組。 我能想到的最簡單的方法是這樣的:

for($i = 0;$i < count($main_array);$i++){
    $groupname_array[] = $main_array[$i]["groupname"];
}
function array_get_keys(&$array, $key) {
    foreach($array as &$value) $value = $value[$key];
}
array_get_keys($array, 'groupname');

要么

function array_get_keys(&$array, $key) {
    $result = Array();
    foreach($array as &$value) $result[] = $value[$key];
    return $result;
}
$new_array = array_get_keys($array, 'groupname');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM