1

在 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"
  } ...

谢谢您的帮助,

托尼

4

4 回答 4

1

例如,您可能会使用这个:

$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 => ...
    ),
  ...
);
于 2013-08-12T20:35:16.607 回答
0

你可以这样做preg_replace

$keys = preg_replace('/(.+)\|\d+/', '$1', array_keys($arr));
$arr = array_combine($keys, $arr);
于 2013-08-12T22:05:07.697 回答
0

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

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

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

于 2013-08-12T20:36:41.737 回答
0

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

$newArray = array();
foreach ($arrayList as $key => $data) {

    $keyParts = explode("|", $key);
    $newArray[$keyParts[0]] = $data;

}

$arrayList = $newArray;
于 2013-08-12T20:34:02.370 回答