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)
。