Php 如何使用数组值的一部分作为新数组的键?

Php 如何使用数组值的一部分作为新数组的键?,php,arrays,Php,Arrays,如何在数组中循环并使用部分值作为新数组的键 大概是这样的: $I = glob("path/to/file/*.txt"); foreach($I as $i){ //key = function_acting_on($i) | value = $i } $I = glob("path/to/file/*.txt"); $newArray = []; foreach($I as $i){ if(isset($newArray[function_acting_on($i)])){

如何在数组中循环并使用部分值作为新数组的键

大概是这样的:

$I = glob("path/to/file/*.txt");
foreach($I as $i){
    //key = function_acting_on($i) | value = $i
}
$I = glob("path/to/file/*.txt");
$newArray = [];
foreach($I as $i){
    if(isset($newArray[function_acting_on($i)])){
        if(!is_array($newArray[function_acting_on($i)]))
            $newArray[function_acting_on($i)] = [$newArray[function_acting_on($i)]];
        $newArray[function_acting_on($i)][] = $i;
    } else {
    $newArray[function_acting_on($i)] = $i; 
            //^^^^^^^^^^^^^^^^^^^^^ Just use the return value as key
    }
}

例如,当我这样做时:

$I = glob("path/to/file/*.txt");
foreach($I as $i){
    $new_array[] = $i;
}
这将自动使用数字枚举键。但在我的代码中,我想使用部分值
$I
作为键

array(4) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(5) "hello"
  [3]=>
  string(5) "world"
}

我以以下方式使用了公认的答案:

$images = glob("images/*.txt");
foreach( $images as $image ){
    preg_match('$pattern',$image,$match);
    $value = (int)preg_replace($pattern_,'',$match[0]);
    $array[$value] = $image;
    }
ksort($array);
var_dump($array);

现在请注意,重复的关键点已被抑制

如您在评论中所述,如果您想使用特定值作为新数组的数组键,您可以这样做:

$I = glob("path/to/file/*.txt");
foreach($I as $i){
    //key = function_acting_on($i) | value = $i
}
$I = glob("path/to/file/*.txt");
$newArray = [];
foreach($I as $i){
    if(isset($newArray[function_acting_on($i)])){
        if(!is_array($newArray[function_acting_on($i)]))
            $newArray[function_acting_on($i)] = [$newArray[function_acting_on($i)]];
        $newArray[function_acting_on($i)][] = $i;
    } else {
    $newArray[function_acting_on($i)] = $i; 
            //^^^^^^^^^^^^^^^^^^^^^ Just use the return value as key
    }
}

正如您在注释中所写的,如果您想使用特定值作为新数组的数组键,您可以这样做:

$I = glob("path/to/file/*.txt");
foreach($I as $i){
    //key = function_acting_on($i) | value = $i
}
$I = glob("path/to/file/*.txt");
$newArray = [];
foreach($I as $i){
    if(isset($newArray[function_acting_on($i)])){
        if(!is_array($newArray[function_acting_on($i)]))
            $newArray[function_acting_on($i)] = [$newArray[function_acting_on($i)]];
        $newArray[function_acting_on($i)][] = $i;
    } else {
    $newArray[function_acting_on($i)] = $i; 
            //^^^^^^^^^^^^^^^^^^^^^ Just use the return value as key
    }
}

嘿,再一次堆叠xD,我能问一下您作为
键和
值的确切含义吗?您是指
foreach($key=>$value){…}
?如果我想要数组
$I
中每个
$I
的键和值,那将是不可能的。在这种情况下,我只需要
$I
中的值,然后我想从中创建一个新数组,其中键是
$I
中包含的整数,值是
$I
,这有意义吗?啊,明白了。试试这个:
foreach($I为$I){$array[someFunc($I)]=$I;}
嘿,再次堆叠xD,我能问一下作为
键和
值的确切含义吗?
foreach($key为$key=>$value的项){…
?如果我想要数组
$I
中每个
$I
的键和值,那就不是了。在这种情况下,我只需要
$I
中的值,然后我想从中创建一个新数组,其中键是
$I
中包含的整数,值是
$I
,这有意义吗?啊,明白了。尝试以下操作:
foreach($I作为$I){$array[someFunc($I)]=$I;}
如何避免重复键抑制?也就是说,假设我有两把相同的钥匙…@StackOverflows取决于你遇到一把钥匙时想做什么,假设我有
'22'=>'jdfhgjfd-p.txt'
'22'=>'jdfhgjfd-q.txt'
,我想保留它们并将它们存储在数组中,如上图所示排序。@stackoverflowth如果你有多个相同的键或想要使用前缀号,你想将其存储为子数组吗?如何
ksort
处理“前缀号”?后缀小数不是更好吗?像22.1和22.2一样,通过这种方式,
21=>bla
22.1=>bla
22.1=>bla
23=>bla
将由ksort正确处理,我所要做的就是将数据类型从
(int)
转换为
(double)
。如何避免重复键抑制?也就是说,假设我有两把相同的钥匙…@StackOverflows取决于你遇到一把钥匙时想做什么,假设我有
'22'=>'jdfhgjfd-p.txt'
'22'=>'jdfhgjfd-q.txt'
,我想保留它们并将它们存储在数组中,如上图所示排序。@stackoverflowth如果你有多个相同的键或想要使用前缀号,你想将其存储为子数组吗?如何
ksort
处理“前缀号”?后缀小数不是更好吗?像22.1和22.2一样,通过这种方式,
21=>bla
22.1=>bla
22.1=>bla
23=>bla
将由ksort正确处理,我所要做的就是将数据类型从
(int)
转换为
(double)