删除多维数组中索引名称的一部分


Delete part of index name in multidimensional array

在PHP中,是否可以将|xyz部分从关键字名称中删除?阵列如下:

    array(30) {
  ["1970-01-01|802"]=>
  array(4) {
    ["id"]=>
    string(3) "176"
    ["datum"]=>
    string(10) "1970-01-01"
    ["title"]=>
    string(8) "Vorschau"
    ["alias"]=>
    string(16) "vorschau-v15-176"
  }
  ["1970-01-01|842"]=>
  array(4) {
    ["id"]=>
    string(3) "176"
    ["datum"]=>
    string(10) "1970-01-01"
    ["title"]=>
    string(8) "Vorschau"
    ["alias"]=>
    string(16) "vorschau-v15-176"
  } ...

谢谢你的帮助,

toni

例如,您可以使用以下内容:

$newArray = array();
foreach( $oldArray as $key => $value ) {
   $newArray[ substr( $key, 0, 10 ) ] = $value;
}

或者修改阵列:

foreach( $someArray as $key => $value ) {
   unset( $someArray[ $key ] );
   $someArray[ substr( $key, 0, 10 ) ] = $value;
}

两种解决方案都会失去价值

由于源数组中的密钥是

   1970-01-01|802
   1970-01-01|842

输出数组将丢失一些数组值:两个键都映射到一个目标键:

   1970-01-01

保留所有值

如果不想丢失值,请尝试以下操作:

$newArray = array();
foreach( $someArray as $key => $value ) {
   $newKey = substr( $key, 0, 10 );
   if ( ! isset( $newArray[ $newKey ] )) {
      $newArray[ $newKey ] = array();
   }
   $newArray[ $newKey ][] = $value;
}

此解决方案的结果数组结构:

array( 
  '1970-01-01' => 
    array(
       0 => ...,
       1 => ...
    ),
  '1970-01-02' => 
    array(
       0 => ...,
       1 => ...,
       2 => ...
    ),
  ...
);

有点。。只需使用修剪的键创建一个新数组,然后将旧的aray设置为新的。

$newArray = array();
foreach ($arrayList as $key => $data) {
    $keyParts = explode("|", $key);
    $newArray[$keyParts[0]] = $data;
}
$arrayList = $newArray;

这是可能的,但在这种情况下,您最终会得到两个相同的数组键。

["1970-01-01"] and ["1970-01-01"]

在这种情况下,它后面的xyz是必需的。

您可以使用preg_replace:

$keys = preg_replace('/(.+)'|'d+/', '$1', array_keys($arr));
$arr = array_combine($keys, $arr);