Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中键和值的重新格式化_Php_Arrays_Sorting_Laravel_Laravel 5.1 - Fatal编程技术网

PHP中键和值的重新格式化

PHP中键和值的重新格式化,php,arrays,sorting,laravel,laravel-5.1,Php,Arrays,Sorting,Laravel,Laravel 5.1,在尝试回答之前,请阅读整个问题。如果我有两个关联数组,其中一些值只匹配一次: $array1 = ['key1' => 'value1', 'key3' => 'value2', etc...]; $array2 = ['key2' => 'value1', 'key4' => 'value2', etc...]; 但是$array2比$array1长,在这些情况下,键没有值: $array1 = ['key1' => 'value1', 'key3' =>

在尝试回答之前,请阅读整个问题。如果我有两个关联数组,其中一些值只匹配一次:

$array1 = ['key1' => 'value1', 'key3' => 'value2', etc...];
$array2 = ['key2' => 'value1', 'key4' => 'value2', etc...];
但是$array2比$array1长,在这些情况下,键没有值:

$array1 = ['key1' => 'value1', 'key3' => 'value2'];
$array2 = ['key2' => 'value1', 'key4' => 'value2', 'key5' => 'value3'];
那么,我如何将它们组合起来以获得以下结果:

$array3 = [
'value1' => [$myconstant => key2], 
'value2' => [$myconstant => key4], 
'value3' => [$myconstant => ''],
 etc...];
请注意,在没有匹配项的情况下,将使用空字符串代替嵌入关联数组中的键。事实上,之所以需要$array1,唯一的原因是我需要知道什么时候与$array2匹配才能获得正确的格式

这些值不会在etc上重复出现。。。链子


我正在使用Laravel并尝试使用集合,但基本的PHP解决方案也可以。非常感谢。

我想您面临的最大障碍是如何将键和键中的值转换为值。这就是那个问题的答案。一旦你有了它,你可以用一个简单的foreach循环来解决你的问题

$myconstant = 'foo';
$array1 = ['key1' => 'value1', 'key3' => 'value2'];
$array2 = ['key2' => 'value1', 'key4' => 'value2', 'key5' => 'value3'];

// array_flip switches keys and values in an array
$flip1 = array_flip($array1);
$flip2 = array_flip($array2);

$array3 = [];
foreach($flip2 as $key => $value) {
    if(!isset($flip1[$key])) {
        $array3[ $key ] = [ $myconstant => '' ];
    } else {
        $array3[ $key ] = [ $myconstant => $value ];    
    }

}

Laravel Collections也有一个方法。这可能有助于将脚本翻译成Laravel。

我真的不知道这两个数组是如何连接的。您只需将值用作array2中的键,并将键用作array2中的值。如果您只想在值也存在于array1中或者是空值时使用该键,那么我可以看到它。
$myconstant
可以是我假设的任何值吗?欢迎使用堆栈溢出!虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!
<?php

$array1 = ['key1' => 'value1', 'key3' => 'value2'];
$array2 = ['key2' => 'value1', 'key4' => 'value2', 'key5' => 'value3'];

function x (array $a= array(), array $b = array()) {
    $array = array();
    $index = new ArrayObject($a);
    $seed  = new ArrayObject($b);

    $a_it = $index->getIterator();
    $b_it = $seed->getIterator();

    while ($a_it->valid()) {
        $x = $a_it->current();
        $y = ($b_it->valid()) ? $b_it->current() : NULL;

        if ($y !== NULL) {
            # there is a value to compare against
            if ($x === $y) {
                $array["{$x}"] = array('myConst'=>$a_it->key());
            }
            $b_it->next();
        } else {
            # there is no value to compare against
            $array["{$x}"] = array('myConst'=> '');
        }
        $a_it->next();
    }
    return $array;
} 

$read = x($array2, $array1);
print_r($read);