【问题标题】:Create an array from arrays that holds data从包含数据的数组创建一个数组
【发布时间】:2020-01-28 14:33:55
【问题描述】:

我正在尝试创建一个数组来保存唯一包含值的数组。

下面的代码运行良好,但如果 $array2(但可以是 array1 或 array3)不包含任何值,我会遇到麻烦。在这种情况下,我只需要合并 array1 和 array3。

$array3 = array_filter( array_map( function( $term ) {
    if ( ! $term = \Softing\Term::get( $term ) ) {
        return false;
    }

    return [
        'link' => $term->get_link(),
        'name' => $term->get_name(),
        'color' => $term->get_color(), 
        ]; 


}, $terms ) );


$formatted_terms[] = array_merge($array1, $array2, $array3);

每个如果三个数组以与 $array3 相同的方式形成,但其中一些可能是空的,没有值。那些我不想合并的数组。只想从具有值的数组中创建数组。

最简单的方法是什么?

我尝试过使用

$formatted_terms[] = array_merge((array)$array1, (array)$array2, (array)$array3);

有什么建议吗?

【问题讨论】:

  • 最简单的方法是什么。不知道你想问什么,除非你向我们展示输入和预期输出的例子
  • @Marko 你有多个数组 $array1,$array2,$array3,$array4 吗? (父数组)中的 $array1 - $array4 在哪里?如果它来自单个数组,我们可以使用循环。
  • 我已经更新了问题@B001ᛦ
  • @DroidDev 现在请检查问题,我发布了我如何形成数组
  • 如果其中一个数组为空也没有问题。另一件事是如果其中一个数组未定义或不是数组。

标签: php


【解决方案1】:

您可以使用array_filter() 删除空数组值。由于您有一个多维数组,您可以考虑将array_map()array_filter() 结合使用。

以以下为例:

$array1 = ['link'=>'foo', 'name'=>'bar', 'filter'=>'hello world'];

$array2 = false;

$array3 = ['link'=>'foo', 'name'=>'bar', 'filter'=>'hello world'];

$formatted_terms[] = array_merge((array)$array1, (array)$array2, (array)$array3);

$formatted_terms = array_map('array_filter',$formatted_terms);

echo '<pre>',print_r($formatted_terms),'</pre>';

https://www.php.net/manual/en/function.array-map.php

https://www.php.net/manual/en/function.array-filter.php

【讨论】:

  • 我需要得到最后的数组,我用它来打印出所有的值 $formatted_terms[] ,它不像这样工作
【解决方案2】:

只需检查它们是否为数组以及它们是否为空。如果是这样,请使用数组合并。如果没有,什么都不做。

$a_all_arrays = array($array1, $array2, $array3);
$a_merged     = array();
foreach($a_all_arrays as $arr) 
{
    if(is_array($arr) && !is_empty($arr)) 
    {
        $a_merged = array_merge($a_merged, $arr);
    }
}

【讨论】:

    【解决方案3】:

    合并前检查数组是否有值,

    $array1=!empty($array1) && is_array($array1)?$array1:[];
    $array2=!empty($array2) && is_array($array2)?$array2:[];
    $array3=!empty($array3) && is_array($array3)?$array3:[];
    $formatted_terms[] = array_merge($array1, $array2, $array3);
    

    【讨论】:

    • 这真的有意义吗?
    • 为什么不呢,如果 $array2 中有一个空值。
    • 为什么不呢,如果 $array2 里面有一个字符串... 如果它包含字符串那么它不为空
    • 空变量\
    • 一个空变量?那是什么?但是您的代码只是说:如果数组为空,则数组为空,如果不是,则它不为空...没有意义
    猜你喜欢
    • 2018-03-06
    • 2012-06-14
    • 2019-09-03
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多