开发者

php array keys problem

开发者 https://www.devze.com 2023-02-03 10:21 出处:网络
I have the following code: $rt1 = array ( \'some_value1\' => \'xyz1\', \'some_value2\' => \'xyz2\',

I have the following code:

$rt1 = array
(
  'some_value1' => 'xyz1',
  'some_value2' => 'xyz2',
  'value_1#30'=>array('0'=>1),
  'value_2#30'=>array('0'=>2),
  'v开发者_如何学JAVAalue_3#30'=>array('0'=>3),
  'value_1#31'=>array('0'=>4),
  'value_2#31'=>array('0'=>5),
  'value_3#31'=>array('0'=>6),
  'some_value3' => 'xyz3',
  'some_value4' => 'xyz4',
);


$array_30 = array
(
'0'=>1,
1=>'2',
2=>'3'
);

$array_31 = array
(
'0'=>4,
'1'=>'5',
'2'=>'6'
);

I need to make it an array and insert the array_30 and array_31 into a DB.


foreach($rt1 as $value){
   $rt2[] = $value['0'];
}  

The question was updated, so here is an updated answer. Quick check, you should really try and update this to whatever more generic purpose you have, but as a proof of concept, a runnable example:

<?php   
$rt1 = array
(
  'some_value1' => 'xyz1',
  'some_value2' => 'xyz2',
  'value_1#30'=>array('0'=>1),
  'value_2#30'=>array('0'=>2),
  'value_3#30'=>array('0'=>3),
  'value_1#31'=>array('0'=>4),
  'value_2#31'=>array('0'=>5),
  'value_3#31'=>array('0'=>6),
  'some_value3' => 'xyz3',
  'some_value4' => 'xyz4',
);

$finalArrays = array();

foreach($rt1 as $key=>$value){
    if(is_array($value)){
       $array_name = "array_".substr($key,-2);
       ${$array_name}[] = $value['0'];
    }

}

var_dump($array_30);
var_dump($array_31);



?>

will output the two arrays with the numbers 1,2,3 and 4,5,6 respectivily


i assume you want to join the values of each of the second-level arrays, in which case:

$result = array();
foreach ($rt1 as $arr) {
    foreach ($arr as $item) {
        $result[] = $item;
    }
}


Inspired by Nanne (which reminded me of dynamically naming variables), this solution will work with every identifier after the \#, regardless of its length:

foreach ( $rt1 as $key => $value )
{
    if ( false == strpos($key, '#') ) // skip keys without #
    {
        continue;
    }       
            // the part after the # is our identity
    list(,$identity) = explode('#', $key); 
    ${'array_'.$identity}[] = $rt1[$key]['0'];  
}


Presuming that this is your actual code, probably you will need to copy the array somewhere using foreach and afterwards create the new array as you wish:

foreach($arr as $key => $value) {
   $arr[$key] = 1;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号