【问题标题】:Targeting a specific part of an associative (one-demonsional) array?针对关联(一维)数组的特定部分?
【发布时间】:2012-12-19 02:56:13
【问题描述】:

我想尝试交换这个数组的第一个和最后一个索引:

 <?php
 $their_name = array(
      'Jim'   => 'dad', 
      'Josh'  => 'son', 
      'Jamie' => 'mom', 
      'Jane'  => 'daughter', 
      'Jill'  => 'daughter'
 );
 ?>

让它看起来像这样:

 <?php
 $their_name = array(
      'Jill'   => 'dad', 
      'Josh'  => 'son', 
      'Jamie' => 'mom', 
      'Jane'  => 'daughter', 
      'Jim'  => 'daughter'
 );
 ?>

我昨晚使用这些数组做了类似的事情:

$temp                   = $user_name[0];     
$user_name[0]           = end($user_name);    
$count                  = count($user_name);  
$user_name[$count-1]    = $temp;             
return $user_name;                            

我假设这些方法是相似的。但是,$their_name[0] 返回 'J'。

谢谢!

【问题讨论】:

  • 你能举一个具体的例子来说明“目标特定部分”是什么意思吗?
  • 什么语言?它看起来像 PHP,但你应该明确地标记它。

标签: php arrays indexing key associative


【解决方案1】:

这是针对您的特定问题的潜在解决方案...

$their_name = array(
  'Jim'   => 'dad', 
  'Josh'  => 'son', 
  'Jamie' => 'mom', 
  'Jane'  => 'daughter', 
  'Jill'  => 'daughter'
);
// rewind array pointer to first element
reset($their_name);
// get key name
$firstKey = key($their_name);
// get value and remove from array
$firstValue = array_shift($their_name);

// advance pointer to last element 
end($their_name);
// get key name
$lastKey = key($their_name);
// get value and remove from array
$lastValue = array_pop($their_name);

// first element using last key and first value
$firstElement = array($lastKey => $firstValue);
// last element using first key and last value
$lastElement = array($firstKey => $lastValue);

// add them to the remaining elements 
$their_name = $firstElement + $their_name + $lastElement;

var_dump($their_name);
// Result:
array(5) {
    ["Jill"]=>
    string(3) "dad"
    ["Josh"]=>
    string(3) "son"
    ["Jamie"]=>
    string(3) "mom"
    ["Jane"]=>
    string(8) "daughter"
    ["Jim"]=>
    string(8) "daughter"
}

【讨论】:

    【解决方案2】:

    这似乎非常基本,但这是您要问的:

    echo $their_name['Jane'];
    
    $their_name['Josh'] = 'son-in-law';
    

    【讨论】:

    • 这确实是基本的,但我的目标是更进一步。我想让名字 (Jim) 和姓氏 (Jill) 交换位置。我只需要掌握基础知识,这样我就可以尝试更准确地定位它。一旦我这样做了,我将尝试使其可重复,这样如果添加了一个新名称,比如“Jackie”,它将与“Jim”交换,而 Jill 将出现在正确的位置。
    • 我尝试使用 end($their_name),结果是“女儿”。我没想到。
    • 你为什么没想到呢?这是数组中的最后一个值,不是吗?无论如何,听起来array_splice() 是您正在寻找的函数,用于将元素放在数组中的特定位置。
    • 目前还不清楚你的真正目标是什么。您对元素的顺序使用什么标准,即是什么让某个地方成为吉尔的“合法地方”?请更新您的问题并提供更多详细信息,现在它太模糊以至于无法回答。
    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 2019-03-28
    • 2017-01-10
    • 2013-11-14
    • 1970-01-01
    相关资源
    最近更新 更多