【问题标题】:PHP Array Value to Array IDPHP 数组值到数组 ID
【发布时间】:2018-08-16 18:45:59
【问题描述】:

我正在尝试使用带有 page_ID 的 WP 函数 get_page_title。

它看起来像这样。

来自

array (
    0 => 'Home',
    1 => 101,
    2 => 'About',
    3 => 102,
    4 => 'Portfolio',
    5 => 103,
    6 => 'Price',
    7 => 104,
    8 => 'Contact',
    9 => 105,
)

array (
    '101' => 'Home',
    '102' => 'About',
    '103' => 'Portfolio',
    '104' => 'Price',
    '105' => 'Contact',
)

示例

array (
    'page_ID' => 'page_title',
)

【问题讨论】:

  • 尝试至少展示你所做的尝试。 SO 不是代码编写服务,如果您向我们提供至少某种形式的尝试,我们双方的体验都会更好
  • 359键的逻辑是什么?
  • 104105 在您的阵列中的什么位置?
  • 页面ID页面标题

标签: php wordpress multidimensional-array


【解决方案1】:

假设您的键始终位于奇数索引中,而您的值始终位于偶数索引中,并且您可以执行相同数量的每个索引:

$data = array (
    0 => 'Home',
    1 => 101,
    2 => 'About',
    3 => 102,
    4 => 'Portfolio',
    5 => 103,
    6 => 'Price',
    7 => 104,
    8 => 'Contact',
    9 => 105,
);

$values = array_filter($data, function($key) {
    return $key % 2 == 0;
}, ARRAY_FILTER_USE_KEY);
$keys = array_filter($data, function($key) {
    return $key % 2 == 1;
}, ARRAY_FILTER_USE_KEY);


var_dump(array_combine($keys, $values));

输出:

array (size=5)
    101 => string 'Home' (length=4)
    102 => string 'About' (length=5)
    103 => string 'Portfolio' (length=9)
    104 => string 'Price' (length=5)
    105 => string 'Contact' (length=7)

或者,您可以排序然后挂载数组

//the string will be in the beggining and the numbers at the end
sort($data, SORT_NUMERIC); //important SORT_NUMERIC to not mix the string values

$data = array_combine(array_slice($data, count($data)/2), array_slice($data, 0, count($data)/2));

【讨论】:

    【解决方案2】:

    这可能有点矫枉过正,但如果总是有相同数量的 id 和 title 并且 title 不以数字开头:

    $array = array_combine(preg_grep('/^\d+/', $array), preg_grep('/^[a-z]+/i', $array));
    

    【讨论】:

    • 我喜欢这个解决方案,但它在这里不起作用。第二个 preg_grep 返回整个数组。一个可能的解决方案是preg_grep('/[^0-9]+/', $array)
    • 这是[a-z],因为\w 得到了所有这些。谢谢。
    • 没问题。现在它可以工作了,如果开头没有特殊字符,比如'Ãbout'
    【解决方案3】:

    我做出与其他人相同的假设,即数组中始终存在偶数个元素,并且它按值/键/值/键/等顺序排列,但这是一个非常干净的选项:

    $output = [];
    
    while ($data && ($v = array_shift($data)) && ($k = array_shift($data))) {
      $output[$k] = $v;
    }
    

    https://3v4l.org/GvGQU

    【讨论】:

      【解决方案4】:

      不使用 array_filter 和 array_shift 函数的另一种方法:

      $i = 0;
      
      while ($i < count($arr)) {
          $val = $arr[$i++];
          $key = $arr[$i++];
          empty($key) ?: $new_arr[$key] = $val;
      }
      

      https://3v4l.org/cSYcc

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-12
        • 2016-09-08
        • 1970-01-01
        • 1970-01-01
        • 2018-12-27
        • 2014-10-30
        • 1970-01-01
        • 2013-02-12
        相关资源
        最近更新 更多